2017-05-12 23 views
3

私は辞書を持っており、最高の価値を持つ鍵を見つけたいと思っています。C#ディクショナリで最高の値を持つキーを見つける方法は?

私は

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

があった場合たとえば、私は、cが返されるとよいでしょう。

私は現時点でこれを持っていますが、最高の値しか検索しません。キーを返す方法がわかりません。

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

を使用する必要があります。

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); 

それとも、このように:

次のようにLINQを使用して

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がnullであることを確認してください。

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(); 
関連する問題