按属性/匿名函数排序列表?

时间:2010-10-09 08:16:32

标签: c# delegates lambda overloading

我有一个像这样定义的列表......

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

为什么没有超载,所以我可以这样排序?

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

我想要最大的一套。最简单的方法是什么?

2 个答案:

答案 0 :(得分:6)

因为在.NET 2.0中引入了List<T>类,所以这个类的设计者决定如此。您可以使用OrderByDescending扩展方法:

sets = sets.OrderByDescending(s => s.Count).ToList();

答案 1 :(得分:4)

试试这个:

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

这会使用Sort(Comparison<T> comparison)的{​​{1}}重载。 表达式将B与A而不是A与B进行比较的事实是产生所需的递减计数顺序的原因。

您的代码不起作用的原因是因为List<T>.SortList<T>.Sort不同,没有接受Enumerable.OrderByDescending键选择器的重载。

@Darin Dimitrov使用Func<TSource, TKey>的技巧也很好,但请注意,这将创建一个不合适的排序列表,并将您对原始列表的引用重新分配给新的已排序列表。