2017-05-12 52 views
3

我有一本詞典,我想找到具有最高價值的關鍵詞。如何在c#字典中找到具有最高值的密鑰?

例如,如果我有

Key | Value 
a | 1 
b | 2 
c | 3 

我會想返回℃。

我現在有這個,但它只搜索最高值,我不知道如何返回密鑰。

var max = occurrences.Max(x => x.Value); 

回答

8
var maxKey = occurrences.OrderByDescending(x => x.Value).First().Key; 
5

您需要包括MoreLinq和使用MaxBy

var result = occurrences.MaxBy(kvp => kvp.Value).Key; 
+1

這太棒了! MoreLinq聽起來很酷!我不知道這件事。打的好! – DDan

+1

我也不知道有一個庫MoreLinq。有用的信息 –

1

下面是一些可以使用的方法。

使用LINQ如下:

var max = myDictionary.Aggregate((l, r) => l.Value > r.Value ? l : r).Key; 

使用LINQ,你可以先找出最大的值,那麼尋找它:

var maxValue = myDictionary.Values.Max(); 
var max = myDictionary.Where(pair => maxValue.Equals(pair.Value)) .Select(pair => pair.Key); 

或者這樣:

var max = from x in myDictionary where x.Value == myDictionary.Max(v => v.Value) select x.Key; 
+0

解決我的朋友 –

0
 var dict = new Dictionary<string,int>(); 
     dict.Add("a",1); 
     dict.Add("b",2); 
     dict.Add("c",3); 

     var max= dict.OrderByDescending(x => x.Value).FirstOrDefault(); 

記得檢查max是否爲空。

0

此處還有一個解決方案,考慮字典中是否存在多個具有最大值的鍵?

Dictionary<char, int> dic = new Dictionary<char, int>(); 
dic.Add('a', 1); 
dic.Add('b', 2); 
dic.Add('c', 3); 
dic.Add('d', 3); 

var maxValue = (int)dic.Max(i => i.Value); 

List<char> maxKeys = dic.Where(i => i.Value == maxValue).Select(i => i.Key).ToList(); 
相關問題