【问题标题】:how to union 2 dictionaries [duplicate]如何联合2个字典[重复]
【发布时间】:2012-11-12 18:26:10
【问题描述】:

可能重复:
Merging dictionaries in C#

使用具有 2 个类型的字典的 c#4

<string,List<int>>



dictionary1 = [ { "key1" , [ 1, 2, 3]} ,
                 { "key2" , [ 1, 2, 4 , 6]}
              ]

我想和dictionary2联合

dictionary2 = [ { "key0" , [ 1, 2, 3]} ,
                 { "key2" , [ 1, 2, 3, 5 , 6]} 
              ]

所以得到 =>

dictionary1 + dictionary2  = [ { "key1" , [ 1, 2, 3]} ,
                 { "key2" , [ 1, 2, 3, 4, 5, 6]},
                 { "key0" , [ 1, 2, 3]}
              ]

我该怎么做?

【问题讨论】:

  • @Candide 它看起来不像 OP 正在寻找的答案,因为他正在寻找双向合并。
  • 顺便问一下,你允许在整数列表中重复吗? (我的意思是{ "key1" , { 1, 2, 2, 3, 3, 3 }}。)
  • 如果您想要 LINQ 方法:stackoverflow.com/a/4792130/1149773
  • 我投票重新打开,因为所谓的“重复”问题似乎是指字典列表而不是 2 个字典
  • 我同意@SamIam,这个问题需要合并值以及整个字典。

标签: c# dictionary


【解决方案1】:

Enumerable.Union?的简单循环:

foreach (var kv in dictionary2)
{
    List<int> values;
    if (dictionary1.TryGetValue(kv.Key, out values))
    {
        dictionary1[kv.Key] = values.Union(kv.Value).ToList();
    }
    else
    {
        dictionary1.Add(kv.Key, kv.Value);
    }
}

【讨论】:

  • @Haddar:仅供参考,编辑了我的答案,因为我的第一个版本有问题。
  • 我以@L.B 为例,10X
【解决方案2】:
var result = 
   dictionary1.Union(dictionary2)
    .GroupBy(kv => kv.Key)
    .ToDictionary(g => g.Key, g => g.SelectMany(v => v.Value).Distinct().ToList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2020-05-14
    • 2017-10-25
    • 2020-03-05
    • 2012-09-12
    • 1970-01-01
    • 2012-05-20
    • 2011-10-17
    相关资源
    最近更新 更多