Сортировать список по свойству / анонимной функции? - PullRequest
2 голосов
/ 09 октября 2010

У меня есть список, определенный следующим образом ...

var sets = new List<HashSet<int>>(numSets);

Почему нет перегрузки, поэтому я могу отсортировать его следующим образом?

sets.Sort(s => s.Count);

Я хочусамый большой набор первым.Какой самый простой способ сделать это?

Ответы [ 2 ]

6 голосов
/ 09 октября 2010

Поскольку класс List<T> был введен в .NET 2.0, и дизайнеры этого класса решили так.Вы можете использовать метод расширения OrderByDescending:

sets = sets.OrderByDescending(s => s.Count).ToList();
4 голосов
/ 09 октября 2010

Попробуйте:

sets.Sort((setA, setB) => setB.Count.CompareTo(setA.Count));

При этом используется перегрузка Sort(Comparison<T> comparison) List<T>.Sort.Тот факт, что выражение сравнивает B с A, а не A с B, - это то, что создает требуемый порядок убывания по количеству.

Причина, по которой ваш код не работает, заключается в том, что List<T>.Sort, в отличие от Enumerable.OrderByDescending, не имеет перегрузки, которая принимает Func<TSource, TKey> ключевой селектор.

@ Техника Дарина Димитрова по использованию OrderByDescending тоже подойдет, но учтите, что это создаст отсортированный список неуместным ипереназначить имеющуюся у вас ссылку на исходный список на новый, отсортированный.

...