2009-12-11 32 views
2

我對這個問題的答案做了相當多的工作,但沒有找到可以找到我需要的地方的例子。如何使用LINQ獲取Dictionary(OfEnEnum,Integer)中的最大值的對應密鑰?

我得到了一個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

您可以在MoreLINQ中使用MaxBy方法。已經在StackOverflow上有一個similar question(雖然在C#中)。您可以使用它像:

Return dic.MaxBy(Function(pair) pair.Value).Key 
0

我這樣做是這樣的:

(From kvp In dic Select kvp Where kvp.Value = dic.Values.Max).First.Key 
0

老問題,但我想我會提供我的LINQ VB答案的情況下,它可以幫助別人。

Return dic.Aggregate(Function(l, r) If(l.Value > r.Value, l, r)).Key 
相關問題