将多个字典组合成一个字典[重复]
Posted
技术标签:
【中文标题】将多个字典组合成一个字典[重复]【英文标题】:Combine multiple dictionaries into a single dictionary [duplicate] 【发布时间】:2012-05-20 12:33:00 【问题描述】:可能重复:Merging dictionaries in C#
字典 1
“a”、“1” "b", "2"
字典 2
“c”、“3” “d”、“4”
字典 3
“e”、“5” "f", "6"
组合字典
“a”、“1” “b”、“2” “c”、“3” “d”、“4” “e”、“5” “f”、“6”
如何将以上 3 个字典组合成一个组合字典?
【问题讨论】:
如果你有不同值的键会发生什么? Sani..我创建了一个类级别的私有变量,然后一次调用另一个私有方法 1 字典将它们添加到组合方法中。它看起来不干净,所以我在这里寻求更好的方法。 您能说明您的字典当前在代码中的表示方式吗? 【参考方案1】:只需遍历它们:
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,我如何创建 IEnumerable 的字典?new Dictionary<string, string>[] your, dictionaries, here
请注意Add
会在重复时抛出异常
if (dict.ContainsKey(item.Key)) dict[item.Key] = item.Value; else dict.Add(item.Key, item.Value);
@abatishchev 这不会对重复项做同样的事情。【参考方案2】:
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);
【讨论】:
请注意ToDictionary
会在重复时抛出异常
@dtb 在我的回答中与union
一起使用时不会有任何重复。
Magnus.. 谢谢.. 这就是我要找的。span>
@Magnus: Union
仅当 KeyValuePair 的键和值都相等时才会删除重复项。如果你有例如var d1 = new Dictionary<string, int>() "a", 5 ; var d2 = new Dictionary<string, int>() "a", 6 ;
然后你会得到重复的键。
@PaulW。你可以这样做:dictionaries.SelectMany(x => x).ToDictionary(x => x.Key, x => x.Value)
以上是关于将多个字典组合成一个字典[重复]的主要内容,如果未能解决你的问题,请参考以下文章