HoCome ottenere il valore MAX dal dizionario?
Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();
Come posso ottenere un Guid
che ha MAX
valore?
HoCome ottenere il valore MAX dal dizionario?
Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();
Come posso ottenere un Guid
che ha MAX
valore?
utilizzando LINQ:
d.Keys.Max(); // Returns the greatest key
Ma ha chiesto la chiave che ha il valore massimo. Questo ci dà solo la chiave massima, quindi è la cosa sbagliata. – robbpriestley
La domanda può essere interpretata in entrambi i modi, e dal momento che l'OP ha accettato questa risposta, posso supporre che questo fosse ciò che intendeva. – Asik
Guid implementa IComparable, quindi:
d.Keys.Max()
Inoltre non è chiaro il motivo per cui ci si vuole fare in modo ...
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());
Supponendo che si desideri il GUID per il massimo DateTime ... –
Rileggendo la domanda, penso che questa sia l'interpretazione corretta e l'unica risposta che fornisce il risultato corretto (sebbene sospetto che potrebbe essere abbreviato con LINQ, non sarà più veloce di questo ciclo esplicito). –
@BenVoigt ciclo esplicito è il miglior affare qui in termini di chiarezza. Un altro post [qui] (https://stackoverflow.com/q/2805703/465053) con alcune ottime risposte. La risposta accettata in questo post afferma di avere una scansione singola utilizzando LINQ. – RBT
Questo funziona alla grande. Restituirà il GUID per la data MAX.
Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();
var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key;
Il codice solido fa il lavoro –
Bello, anche se otterrei che 'd.Values.Max()' esca in una variabile in anticipo, altrimenti probabilmente ripeterò la ricerca di Max() in ogni singola iterazione. – Nyerguds
Un altro modo potrebbe aiuta a ottenere singolo KeyValuePair.
KeyValuePair<char, int> GuidKeyPair = guidDict.FirstOrDefault(MaxGuid => MaxGuid.Value == guidDict.Values.Max());
ordinazione i dati in primo luogo potrebbe essere una soluzione.
var maxGuid = d.OrderByDescending(x => x.Value).FirstOrDefault().Key;
La risposta accettata non ha funzionato per me. Il seguente codice (utilizzando MoreLinq) ha funzionato correttamente:
var fooDict = new Dictionary<string, int>();
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Key;
var biggestInt = fooDict[keyForBiggest];
Utilizzando LINQ sul dizionario.
var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max()));
possibile duplicato del [Get Max() del valore alfanumerico] (http://stackoverflow.com/questions/7268605/get-max-of-alphanumeric-value) –
Si prega di provare a fare la propria ricerca prima di fare una domanda su SO. –
Poiché "GUID" sta per "identificatore univoco globale", sembra incredibilmente strano che tu voglia un valore "massimo". Un GUID è utilizzato a causa della sua unicità; Non riesco a pensare a un'applicazione del mondo reale in cui abbia senso pensarli come se fossero ordinati. – jpmc26