Wie lassen sich 2 oder mehr Wörterbücher am besten zusammenführen ( Dictionary<T1,T2>
) in C#? (3.0-Funktionen wie LINQ sind in Ordnung).
Ich denke an eine Methodensignatur in der Art von:
public static Dictionary<TKey,TValue>
Merge<TKey,TValue>(Dictionary<TKey,TValue>[] dictionaries);
o
public static Dictionary<TKey,TValue>
Merge<TKey,TValue>(IEnumerable<Dictionary<TKey,TValue>> dictionaries);
EDIT: Ich habe eine coole Lösung von JaredPar und Jon Skeet, aber ich dachte an etwas, das mit doppelten Schlüsseln umgehen kann. Im Falle einer Kollision spielt es keine Rolle, welcher Wert im Diktat gespeichert wird, solange er konsistent ist.
238 Stimmen
Unabhängig davon, aber für jeden, der nur zwei Wörterbücher ohne Prüfung auf doppelte Schlüssel zusammenführen möchte, funktioniert dies sehr gut:
dicA.Concat(dicB).ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
8 Stimmen
@Benjol Sie hätten dies im Antwortabschnitt hinzufügen können
8 Stimmen
Clojure's Zusammenführung in C#:
dict1.Concat(dict2).GroupBy(p => p.Key).ToDictionary(g => g.Key, g => g.Last().Value)
7 Stimmen
@Benjol: Beseitigen Sie Duplikate, indem Sie die Einträge aus dem ersten Wörterbuch mit
dictA.Concat(dictB.Where(kvp => !dictA.ContainsKey(kvp.Key))).ToDictionary(kvp=> kvp.Key, kvp => kvp.Value)
.