у меня есть этот класс в своем кодеСортировка списка объектов нескольких типов данных
class Stock
{
public DateTime Date;
public string Day;
public double Open, Close, Diff;
public int Volume;
public Stock(double open, double close, double diff, int volume, string day, DateTime date)
{
this.Open = open;
this.Close = close;
this.Diff = diff;
this.Volume = volume;
this.Day = day;
this.Date = date;
}
}
В другом классе я хочу, чтобы создать пузырь сортировки, который будет сортировать список акций (List<Stocks>
) перешел к нему, У меня есть несколько проблем с этой проблемой, основная проблема связана с типами данных, а это не просто сравнение двух значений, когда они могут быть string
, int
, double
или DateTime
. Я сделал это с помощью метода, который использует TryParse
для проверки действительного типа данных, но им ищет хороший чистый раствор, это моя попытка до сих пор
public void BubblesortBy(int sortBy, List<Stock> Stocks)
{
Type objType = typeof(Stock);
FieldInfo[] fields = objType.GetFields();
Stock temp = null;
int loopCount = 0;
bool doBreak = true;
for (int i = 0; i < Stocks.Count; i++)
{
doBreak = true;
for (int j = 0; j < Stocks.Count - 1; j++)
{
if (Compare(fields[sortBy - 1].FieldType.ToString(), fields[sortBy].GetValue(Stocks[j]), fields[sortBy].GetValue(Stocks[j+1])))
{
temp = Stocks[sortBy + 1];
Stocks[sortBy + 1] = Stocks[sortBy];
Stocks[sortBy] = temp;
doBreak = false;
}
loopCount++;
}
if (doBreak) { break; /*early escape*/ }
}
}
int
переданный ей определяет, следует ли сортировать, поэтому я использую отражение, поэтому переменные доступны по номерам.
- Дата
- День
- Открыть
- Закрыть
- Разница
- Объем
Я бы рекомендовал использовать оператор switch и выполнять сравнения на основе типа данных в ваших блоках case. –
Вы внедряете сортировку пузыря в качестве учебного упражнения или для практических целей? Для 99,9% практических целей не реализуйте свой собственный алгоритм сортировки. –
@TimS. Как узнать, как эффективно проверять типы данных? –