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