Я разработал класс, который по сути является ничем иным, как объектом, который хранит большое количество свойств фрагмента данных. Я реализовал IComparable в классе. Объекты класса создаются и хранятся в списке.
Существует дополнительный уровень сложности в том, что определенные поля объекта определяют, по каким полям я сортирую (существует иерархия). Таким образом, иерархия:
- 1) Имя (определено при создании экземпляра)
- 2) Продукт (определяется при создании экземпляра)
- 3) NetGroup (определено
после создания, после первоначального
создание списка повторюсь назад
выполнить расчет и
установить группу.)
- 4) Дата (определяется при создании экземпляра)
Существует несколько флагов (полей bool), которые определяют, используются ли два из вышеперечисленных в иерархии сортировки.
- 5) AllowProductGroupingInd (определено
при создании)
- 6) AllowDateGroupingInd (определено в
конкретизация)
Производительность сортировки в относительно небольшом списке (n = 1000) низкая, обычно около 500 мс.
Я не уверен, правильно ли реализовал мой компаратор.
Мой метод выглядит так:
public int CompareTo(Exposure rfpe)
{
if (Name.CompareTo(rfpe.Name) != 0)
return Name.CompareTo(rfpe.Name);
else
{
if (AllowProductGroupingInd == false)
{
if (ProductId.CompareTo(rfpe.ProductId) != 0)
return ProductId.CompareTo(rfpe.ProductId);
}
if (NetGroup.CompareTo(rfpe.NetGroup) != 0)
return NetGroup.CompareTo(rfpe.NetGroup );
else if (AllowDateGroupingInd == false)
{
if (Date.CompareTo(rfpe.Date) != 0)
return Date.CompareTo(rfpe.Date);
else
return 0;
}
return 0;
}
}
Я использую C # 3.0, поэтому я не могу использовать LINQ. Это разумная реализация того, что я хочу достичь? Есть ли более элегантное решение? Мне кажется, я могу использовать слишком много условных выражений, но я не уверен, как обойти это.