web-dev-qa-db-ja.com

辞書から最大値を取得する方法は?

私が持っています

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();

Guid値を持つMAXを取得するにはどうすればよいですか?

27
Terminador

これは受け入れられた答えだったので、質問の考えられるすべての意味をカバーしようとします。

var dict = new Dictionary<string, int> { { "b", 3 }, { "a", 4 } };

// greatest key
var maxKey = dict.Keys.Max(); // "b"

// greatest value
var maxValue = dict.Values.Max(); // 4

// key of the greatest value
// 4 is the greatest value, and its key is "a", so "a" is the answer.
var keyOfMaxValue = dict.Aggregate((x, y) => x.Value > y.Value ? x : y).Key; // "a"

注:質問にはSystem.Guidをキータイプとして。 「最大のGUIDとは何か」を尋ねるのは理にかなっていないかもしれません。なぜなら、それらは順序付け可能な概念を表すのではなく、単に一意の値であることを意図しているからです。それにもかかわらず、上記のコードは、>演算子、stringおよびintはここでは簡潔さのために選択されています。

52
Asik

これはうまく機能します。 MAX日付に対してGUIDを返します。

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); 
var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key;
42
Papa Burgundy
            var maxGuid = Guid.Empty;
            var maxDateTime = DateTime.MinValue;
            foreach (var kvp in d)
            {
                if (kvp.Value > maxDateTime)
                {
                    maxGuid = kvp.Key;
                    maxDateTime = kvp.Value;
                }
            }
            Console.WriteLine("Guid of max date is: " + maxGuid.ToString());
10
Steven P

最初にデータを注文することが1つの解決策になる可能性があります。

var maxGuid = d.OrderByDescending(x => x.Value).FirstOrDefault().Key;
6
user2187538

GuidはIComparableを実装するため、次のようになります。

d.Keys.Max()

また、なぜそうしたいのかは明らかではありません...

5
Alexei Levenkov

辞書でLINQを使用する。

var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max()));
3
Hamza Khanzada

受け入れられた答えは私にはうまくいきませんでした。ただし、次のコード(MoreLinqを使用)がジョブを実行しました。

var fooDict = new Dictionary<string, int>();
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Key;
var biggestInt = fooDict[keyForBiggest];
0
GDB

別の方法でSingle KeyValuePairを取得できます。

KeyValuePair<char, int> GuidKeyPair = guidDict.FirstOrDefault( MaxGuid => MaxGuid.Value == guidDict.Values.Max());
0
Sai