我做了很多寻找这个问题的答案,但没有我能找到的例子一直到我需要的地方。
我有一个Dictionary(Of SomeEnum, Integer)
在填充一些具有SomeEnum
类型属性的对象时被填满。循环完成后,我想要在对象列表中出现最多的SomeEnum
类型。我还需要其他计数用于显示目的,因此使用简单的Dictionary(Of K, V)
。
我正在寻找一个LINQ查询,通过查看每个密钥出现次数,返回最常出现的SomeEnum
密钥。或者也许有一种更容易的方法。
我可以这样做:
Return (From kvp As KeyValuePair(Of SomeEnum, Integer) _
In Me.MyObjects Order By kvp.Value Descending _
Select kvp).First().Key
但是,排序是不是比试图在某种程度上摆动Max()更昂贵的操作?我是LINQ n00b,所以任何反馈都会非常感激。
答案 0 :(得分:3)
您可以在MoreLINQ中使用MaxBy
方法。 StackOverflow上已经有similar question(但它在C#中)。您可以像使用它一样使用它:
Return dic.MaxBy(Function(pair) pair.Value).Key
答案 1 :(得分:0)
我是这样做的:
(From kvp In dic Select kvp Where kvp.Value = dic.Values.Max).First.Key
答案 2 :(得分:0)
老问题,但我认为我提供了我的LINQ VB答案,以防其他人帮助。
Return dic.Aggregate(Function(l, r) If(l.Value > r.Value, l, r)).Key