2012-05-11 49 views
18

可能重複:
Merging dictionaries in C#合併多個詞典成單個字典

字典1

「一」, 「1」
「B」,「 2「

字典2

「C」, 「3」
「d」, 「4」

字典3

「E」, 「5」
「f」,「6」

組合字典

「一」, 「1」
「B」, 「2」
「C」, 「3」
「d」, 「4」
「E」, 「5」
「F」, 「6」

怎樣上述3個詞典合併成一個單一的組合字典?

+2

如果您的鍵具有不同的值,會發生什麼? –

+0

Sani..I創建了一個類級別的私有變量,然後每次調用另一個私有方法1字典將它們添加到組合方法中。它看起來並不乾淨,所以我在這裏要求更好的方法。 –

+1

你可以展示你的代碼中目前代表的字典嗎? – EtherDragon

回答

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); 

編輯
爲了保證沒有重複鑰匙使用:

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

請注意'ToDictionary會拋出重複的異常 – dtb

+0

@dtb在與'union'一起使用時不會有任何重複,就像我的答案一樣。 – Magnus

+0

Magnus ..謝謝..這是我在找的東西。 –

10

通過他們只是循環:

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

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

(假設dictionariesToCombine是你的字典一些IEnumerable結合起來,比方說,一個陣列。)

+1

感謝minitech,我如何創建IEnumerable字典? –

+0

'new Dictionary [] {your,dictionaries,here}' – Ryan

+4

請注意,如果(dict.ContainsKey(item.Key)) dict [item.Key] ='Add'將會在重複項 – Magnus