我有一个像这样定义的列表......
var sets = new List<HashSet<int>>(numSets);
为什么没有超载,所以我可以这样排序?
sets.Sort(s => s.Count);
我想要最大的一套。最简单的方法是什么?
答案 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>.Sort
与List<T>.Sort
不同,没有接受Enumerable.OrderByDescending
键选择器的重载。
Func<TSource, TKey>
的技巧也很好,但请注意,这将创建一个不合适的排序列表,并将您对原始列表的引用重新分配给新的已排序列表。