Combine multiple dictionaries into a single dictionary
Possible Duplicate:
Merging dictionaries in C#
词典1P></
"a","1"
"b","2"
词典2P></
"c","3"
"d","4"
字典3P></
"e","5"
"f","6"
联合词典P></
"a","1"
"b","2"
"c","3"
"d","4"
"e","5"
"f","6"
如何给组合the above 3进入单打联合字典词典吗?P></
- 如果有不同值的键,会发生什么?
- sani..i创建了一个类级私有变量,然后一次调用另一个私有方法1字典,将它们添加到组合方法中。它看起来不干净,所以我想在这里找一个更好的方法。
- 你能展示一下你的字典目前在代码中是如何表示的吗?
1 2 3 4 5
| 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); |
号
编辑要确保没有重复的密钥,请使用:
1 2
| var result = d1.Concat(d2).Concat(d3).GroupBy(d => d.Key)
.ToDictionary (d => d.Key, d => d.First().Value); |
- 注意,ToDictionary将对重复项抛出异常
- @DTB在与union一起使用时,不会有任何重复,如我的答案所示。
- 马格纳斯……谢谢。。这就是我要找的。
- @magnus:union仅当keyValuePair的key和value相等时才删除重复项。如果你有,例如var d1 = new Dictionary() { {"a", 5 } }; var d2 = new Dictionary() { {"a", 6 } };,那么你会得到重复的密钥。
- @DTB啊,说得对!
- 如果您试图合并的词典数量未知,解决方案是什么?有没有一种方法可以获取字典列表并以同样的方式合并它们?谢谢您
- @保罗。你可以:dictionaries.SelectMany(x => x).ToDictionary(x => x.Key, x => x.Value)。
只需循环它们:
1 2 3 4 5 6 7
| var result = new Dictionary <string, string>();
foreach (var dict in dictionariesToCombine ) {
foreach (var item in dict ) {
result .Add(item .Key, item .Value);
}
} |
(假设dictionariesToCombine是您的字典中要组合的IEnumerable,例如数组。)
- 感谢Minitech,我如何创建大量字典?
- new Dictionary[] { your, dictionaries, here }。
- 注意,Add将对重复项抛出异常
- if(dict.containskey(item.key))dict[item.key]=item.value;else dict.add(item.key,item.value);
- @对复制品不做同样事情的abatishchev。
- @这确实会覆盖副本。但你是对的,这取决于作者想要什么样的行为。