it-swarm.com.de

Wie bekomme ich den MAX-Wert aus dem Wörterbuch?

Ich habe 

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

Wie kann ich eine Guid bekommen, die MAX hat?

22
Terminador

Da dies die akzeptierte Antwort war, werde ich versuchen, alle möglichen Bedeutungen der Frage abzudecken:

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"

Hinweis: Die Frage hat System.Guid als Schlüsseltyp. Die Frage "Was ist die beste GUID" ist möglicherweise nicht sinnvoll, da sie lediglich als eindeutige Werte gedacht sind und nicht irgendein bestellbares Konzept darstellen. Der obige Code funktioniert jedoch mit jedem Typ, der den >-Operator unterstützt. string und int werden hier aus Gründen der Genauigkeit ausgewählt.

40
Asik

Das funktioniert super. Es wird die GUID für das MAX-Datum zurückgegeben.

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); 
var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key;
38
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

Die erste Bestellung Ihrer Daten könnte eine Lösung sein.

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

Guid implementiert IComparable, also:

d.Keys.Max()

Es ist auch nicht klar, warum man das tun möchte ...

5
Alexei Levenkov

Mit LINQ für das Wörterbuch.

var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max()));
1

Die akzeptierte Antwort hat bei mir nicht funktioniert. Der folgende Code (mit MoreLinq) hat jedoch die Aufgabe erfüllt:

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

Ein anderer Weg könnte helfen, Single KeyValuePair zu erhalten.

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