按属性/匿名函数对列表进行排序?
我有一个这样定义的列表...
var sets = new List<HashSet<int>>(numSets);
为什么没有重载,以便我可以像这样对其进行排序?
sets.Sort(s => s.Count);
我首先想要最大的一组。最简单的方法是什么?
I've got a list defined like this...
var sets = new List<HashSet<int>>(numSets);
Why isn't there an overload so I can sort it like this?
sets.Sort(s => s.Count);
I want the largest set first. What's the easiest way to do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为
List
类是在 .NET 2.0 中引入的,并且该类的设计者决定这样做。您可以使用OrderByDescending
< /a> 扩展方法:Because
List<T>
class was introduced in .NET 2.0 and the designers of this class decided so. You could use theOrderByDescending
extension method:试试这个:
这使用了
List.Sort
的Sort(ComparisonComparison)
重载。该表达式将 B 与 A 进行比较,而不是 A 与 B 进行比较,这一事实会产生您所需的按计数降序排列。
您的代码不起作用的原因是
List.Sort
与Enumerable.OrderByDescending
不同,它没有接受Func
键选择器。@Darin Dimitrov 使用 OrderByDescending 的技术也很好,但请注意,这会创建一个不合适的排序列表,并将您对原始列表的引用重新分配给新的排序列表。
Try this:
This uses the
Sort(Comparison<T> comparison)
overload ofList<T>.Sort
.The fact that the expression compares B with A rather than A with B is what produces the descending-by-count order that you require.
The reason your code doesn't work is because
List<T>.Sort
, unlikeEnumerable.OrderByDescending
, does not have an overload that accepts aFunc<TSource, TKey>
key-selector.@Darin Dimitrov's technique of using
OrderByDescending
is fine too, but note that this will create a sorted list out of place and reassign the reference you have to the original list to the new, sorted one.