我有这样定义的列表...按属性/匿名函数排序列表?
var sets = new List<HashSet<int>>(numSets);
为什么没有超载,所以我可以这样排序呢?我想要最大的一组。最简单的方法是什么?
我有这样定义的列表...按属性/匿名函数排序列表?
var sets = new List<HashSet<int>>(numSets);
为什么没有超载,所以我可以这样排序呢?我想要最大的一组。最简单的方法是什么?
因为List<T>
类是在.NET 2.0中引入的,所以这个类的设计者决定如此。你可以使用OrderByDescending
扩展方法:
sets = sets.OrderByDescending(s => s.Count).ToList();
试试这个:
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>
密钥选择器的超载。
@Darin Dimitrov的使用OrderByDescending
的技术也很好,但请注意,这将创建一个排序列表,并将原始列表中的引用重新分配给新排序的列表。
这将按升序排序。 OP希望最大的一组。你需要'OrderByDescending'。 – Ani 2010-10-09 08:35:08
@Ani,正确。我更新了我的帖子以反映这一点。感谢您指出。 – 2010-10-09 08:37:11
这两种解决方案看起来都不错......我会等着看看谁会在我选择之前获得更多选票:P谢谢!我喜欢这个人阅读的容易程度。 – mpen 2010-10-09 09:01:41