2015-06-03 2 views
-2

Я должен хранить около 100 тысяч предметов. Каждый из них содержит два значения (поля?)Сортировка и сохранение списка из двух значений

DateTime, Decimal 

Я должен сортировать эти элементы с помощью DateTime значений, а также. Тем не менее, моя попытка не удалась с время компиляции ошибкой:

List<DateTime, Decimal> list = ... // <- Compile time error 
    ... 
    list.Sort(); 

Как я могу решить эту проблему хранящей и сортировкой таких пунктов? Можно ли использовать Linq?

+2

Списка в C# имеет только один общий параметр типа, например 'Список '. Можете ли вы показать свой реальный код? – Kobi

+1

'List ' не будет компилироваться. Используйте 'Словарь' или Список' Tuple'/'KeyValuePair' или пользовательский объект – fubo

+0

Где вы можете получить этот список * от *? Если это база данных, используйте функцию db для ее сортировки (с помощью индекса) –

ответ

3

Во-первых, вы не можете объявить List<T> как то

List<DateTime, decimal> list // compile time error 

после List<T> может иметь только один общий параметр (это T). Самое, наверное, популярное решение, использующее

Tuple<T1, T2, ...> 

в вашем случае

Tuple<DateTime, decimal> 

Так что реализация может быть

List<Tuple<DateTime, decimal>> list = new List<Tuple<DateTime, decimal>>() { 
    new Tuple<DateTime, decimal> (DateTime.Now, 2), 
    new Tuple<DateTime, decimal> (DateTime.Now, 1), 
    new Tuple<DateTime, decimal> (DateTime.Now, 3), 
    }; 

    // Just sorting the existing list 
    list.Sort((Comparison<Tuple<DateTime, decimal>>) 
    ((left, right) => left.Item1.CompareTo(right.Item1))); 

    // To create another (sorted) list by Linq: 
    List<Tuple<DateTime, decimal>> result = list 
    .OrderBy(item => item.Item1); 
Смежные вопросы