Ho una lista di dizionari che hanno chiavi di tipo stringa e valori che sono ints.Come trovare il valore massimo per ogni chiave in un elenco di dizionari utilizzando LINQ?
Molti dizionari contengono le stesse chiavi ma non tutte.
Quindi la mia domanda è: usare LINQ come troverei il valore massimo associato a ciascuna chiave distinta in tutti i dizionari?
Così, per esempio dato l'input seguente:
var data = new List<Dictionary<string, int>>
{
new Dictionary<string, int> {{"alpha", 4}, {"gorilla", 2}, {"gamma", 3}},
new Dictionary<string, int> {{"alpha", 1}, {"beta", 3}, {"gamma", 1}},
new Dictionary<string, int> {{"monkey", 2}, {"beta", 2}, {"gamma", 2}},
};
vorrei qualche tipo di raccolta che contiene:
{"alpha", 4},
{"gorilla", 2},
{"gamma", 3},
{"beta", 3},
{"monkey", 2}
(Attualmente sto scorrendo l'elenco e tenere traccia delle cose me stesso, mi stavo davvero chiedendo se c'è un modo più carino LINQ di farlo)
MODIFICA: Anche io non so quali sono i tasti stringa in anticipo
Marvelous! Perché è sempre così ovvio quando lo vedi :-) – Argos
Ci sono, naturalmente, molti altri modi per fare la stessa cosa: 'data.SelectMany (d => d) .GroupBy (d => d.Key, d => d.Value, (k, i) => nuovo {GroupName = k, MaxValue = i.Max()}) 'o' da d in data.SelectMany (i => i) gruppo d.Valore di d .Key in g select new {GroupName = g.Key, MaxValue = g.Max()} 'sono due di questi. –