如何使用LINQ获取字典(OfEnum,Integer)中最大值的相应键?

时间:2009-12-11 21:07:37

标签: vb.net linq dictionary

我做了很多寻找这个问题的答案,但没有我能找到的例子一直到我需要的地方。

我有一个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,所以任何反馈都会非常感激。

3 个答案:

答案 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