2012-05-11 24 views
18

Powiel możliwe:
Merging dictionaries in C#Łączenie wielu słowników w jednym słowniku

słownika 1

"A", "1"
"b", " 2 "

słownika 2

"C", "3"
"D", "4"

słownik 3

"E", "5"
"f", "6"

Słownik połączony

"a", "1"
"b", "2"
"C", "3"
"D", "4"
"E", "5"
"f", "6"

Jak połączyć powyższe 3 słowników w pojedynczym połączonym słowniku?

+2

Co powinno się stać, jeśli masz klucze o różnych wartościach? –

+0

Sani..I stworzyłem prywatną zmienną poziomu klasy, a następnie wywołałem inny prywatny słownik 1 metody naraz, aby dodać je do metody łączonej. To nie wygląda na czyste, więc proszę o lepszą metodę. –

+1

Czy możesz pokazać, jak twoje słowniki są obecnie reprezentowane w kodzie? – EtherDragon

Odpowiedz

108
var d1 = new Dictionary<string, int>(); 
var d2 = new Dictionary<string, int>(); 
var d3 = new Dictionary<string, int>(); 

var result = d1.Union(d2).Union(d3).ToDictionary (k => k.Key, v => v.Value); 

EDIT
Aby zapewnić nie duplikat użyj klawiszy:

var result = d1.Concat(d2).Concat(d3).GroupBy(d => d.Key) 
      .ToDictionary (d => d.Key, d => d.First().Value); 
+3

Zauważ, że 'ToDictionary' wyrzuci wyjątek na duplikatach – dtb

+0

@dtb nie będzie żadnych duplikatów, gdy użyje się go z' union' jak w mojej odpowiedzi. – Magnus

+0

Magnus .. dzięki .. to, czego szukałem. –

10

Wystarczy pętli nich:

var result = new Dictionary<string, string>(); 

foreach (var dict in dictionariesToCombine) { 
    foreach (var item in dict) { 
     result.Add(item.Key, item.Value); 
    } 
} 

(Zakłada dictionariesToCombine pewne IEnumerable swoich słowników połączyć, powiedzmy, tablicą.)

+1

dzięki minitech, jak mogę utworzyć IEnumerable of dictionary? –

+0

'nowy słownik <łańcuch, ciąg> [] {twój, słowniki, tutaj}' – Ryan

+4

Zauważ, że 'Dodaj' rzuci wyjątek na duplikaty – Magnus

Powiązane problemy