2012-05-11 13 views
18

Mögliche Duplizieren Kombinieren:
Merging dictionaries in C#mehrere Wörterbücher in einem einzigen Wörterbuch

Wörterbuch 1

"a", "1"
"b", " 2 "

Wörterbuch 2

"c", "3"
"d", "4"

Wörterbuch 3

"e", "5"
"f", "6"

Kombiniertes Wörterbuch

"a", "1"
"b", "2"
"c", "3"
"d", "4"
"e", "5"
"f", "6"

Wie kombiniere ich die oben genannten 3 Wörterbücher in einem einzigen kombinierten Wörterbuch?

+2

Was passiert, wenn Sie Schlüssel mit unterschiedlichen Werten haben? –

+0

Sani..Ich habe eine private Variable auf Klassenebene erstellt und dann ein weiteres Wörterbuch der Methode 1 einzeln aufgerufen, um sie der kombinierten Methode hinzuzufügen. Es sieht nicht sauber aus, also frage ich nach einer besseren Methode hier. –

+1

Können Sie zeigen, wie Ihre Wörterbücher derzeit im Code dargestellt werden? – EtherDragon

Antwort

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
kein Duplikat Um sicherzustellen, Schlüssel verwenden:

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

Beachten Sie, dass "ToDictionary" eine Ausnahme auf Duplikate werfen wird – dtb

+0

@dtb Es wird keine Duplikate geben, wenn es mit "union" wie in meiner Antwort verwendet wird. – Magnus

+0

Magnus .. danke .. das, was ich gesucht habe. –

10

Gerade Schleife durch sie:

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

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

(Geht davon aus dictionariesToCombine einige IEnumerable Ihrer Wörterbücher zu kombinieren, sagen wir, ein Array.)

+1

danke minitech, wie erstelle ich IEnumerable von Wörterbüchern? –

+0

'neues Dictionary [] {your, wörterbücher, here}' – Ryan

+4

Beachten Sie, dass 'Add' eine Ausnahme auf Duplikate wirft – Magnus

Verwandte Themen