2012-05-11 48 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