【问题标题】: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 字典将它们添加到组合方法中。它看起来不干净,所以我在这里寻求更好的方法。
  • 您能说明您的字典当前在代码中的表示方式吗?

标签: c#


【解决方案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&lt;string, string&gt;[] { 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&lt;string, int&gt;() { { "a", 5 } }; var d2 = new Dictionary&lt;string, int&gt;() { { "a", 6 } }; 然后你会得到重复的键。
  • @PaulW。你可以这样做:dictionaries.SelectMany(x =&gt; x).ToDictionary(x =&gt; x.Key, x =&gt; x.Value)
猜你喜欢
  • 2018-11-14
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多