with values valor obtener net modificar iterar initialized diccionario c# .net linq dictionary

values - modificar valor diccionario c#



¿Cómo obtener el valor MAX del diccionario? (8)

Esto funciona muy bien. Devolverá el GUID para la fecha MAX.

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key;

yo tengo

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

¿Cómo puedo obtener un Guid que tenga valor MAX ?


Guid implementa IComparable, por lo que:

d.Keys.Max()

Tampoco está claro por qué uno querría hacerlo ...


La respuesta aceptada no funcionó para mí. Sin embargo, el siguiente código (usando MoreLinq) hizo el trabajo:

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


Ordenar sus datos en primer lugar podría ser una solución.

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


Usando LINQ en el diccionario.

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


Ya que esta fue la respuesta aceptada, trataré de cubrir todos los significados posibles de la pregunta:

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"

Nota: la pregunta tiene System.Guid como tipo de clave. Puede que no tenga sentido preguntar "cuál es el GUID más grande", ya que simplemente tienen la intención de ser valores únicos, en lugar de representar cualquier concepto ordenable. No obstante, el código anterior funcionará con cualquier tipo que sea compatible con el operador, la string y el int se eligen aquí por concisión.


Otra forma podría ayudar a obtener Single KeyValuePair.

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


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