J'ai deux dictionnaires avec la même structure: J'aimerais résumer les valeurs des dictionnaires et renvoyer une troisième dictionnaire avec les clés et les valeurs totales de chaque Touche: P> Table, 9
Chair, 10
Couch, 9
6 Réponses :
Ce qui suit n'est pas la solution la plus efficace (car elle traite simplement les deux dictionnaires comme énumérables), mais cela fonctionnera et il est assez clair:
Dictionary<string, int> result = (from e in foo.Concat(bar) group e by e.Key into g select new { Name = g.Key, Count = g.Sum(kvp => kvp.Value) }) .ToDictionary(item => item.Name, item => item.Count);
Edité votre réponse pour montrer comment récupérer la requête résultante dans un dictionnaire.
(from a in foo let b = bar.ContainsKey(a.Key) ? (int?)bar[a.Key] : null select new { Key = a.Key, Value = a.Value + (b != null ? b : 0) } ).ToDictionary(a => a.Key, a => a.Value)
Merci d'avoir répondu; Cette réponse aide également si vous souhaitez calculer des deltas entre les objets.
Si vous avez une garantie de fonte Garantie que les deux ensembles de clés sont les mêmes: meilleur que je puisse trouver si les clés ne sont pas identiques: p> < Pré> xxx pré> p>
mmm, je ne sais pas qui est plus par formant, mais comment votre solution n'est pas lisible?
Qu'est-ce qui ne va pas avec p>
foreach (string key in d1.Keys) { if(d2.ContainsKey(key) d3.Add(key,d1[key]+d2[key]); else d3.Add(key,d1[key]) } foreach (string key in d2.keys) { if(!d1.ContainsKey(key) // only get keys that are unique to d2 d3.Add(key,d2[key]); }
Eh bien, il reste toujours la question de d2 code> avoir des clés qui ne sont pas dans
d1 code>, bien sûr ...
@Dan Tao Ouais, cela ne fonctionnerait que pour les clés partagées. EDIT: D'accord, j'ai ajouté la solution pour cela: p
Qu'en est-il de quelque chose comme ça? au moins c'est (genre de?) Neat. P> P>
J'ai écrit une petite méthode d'extension qui fusionnera une liste de dictionnaires avec des valeurs INT. J'ai utilisé le code de cette question pour le faire pour que je partage
Est-il garanti que les deux dictionnaires auront le même ensemble de clés?
@Carlos Dans ce cas, oui. Mais il serait intéressant de voir une solution où les dictionnaires partagent des clés et non d'autres.