【问题标题】:Merging the values of two dictionaries [duplicate]合并两个字典的值[重复]
【发布时间】:2013-02-21 09:14:39
【问题描述】:

希望我能征求意见。

我有两本字典

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> dictFinal = new Dictionary<string, List<string>>();

在这两种情况下,键值都是相同的,但都表示不同的字符串值列表。

我想要的是拥有一个具有相同键值的字典,并将字符串值列表合并到一个字典中

我确实从一个严重的循环开始,但很快意识到这可能不是最好的解决方案

foreach (var fin in dictFinal)
            {
                foreach (var valFin in fin.Value)
                {
                    foreach (var kvp in dict)
                    {
                        foreach (var v in kvp.Value)
                        {

                        }
                    }

                }

            }

有没有更好的方法将这两个字典“放在一起”?

【问题讨论】:

标签: c# dictionary


【解决方案1】:
Dictionary<string, List<string>> d1 = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> d2 = new Dictionary<string, List<string>>();
d2.ToList().ForEach(x =>
                         {
                           if (d1.ContainsKey(x.Key))
                             d1[x.Key].AddRange(x.Value);
                           else
                             d1.Add(x.Key, x.Value);
                         });

这会将两个字典合并到d1

没有ToList()

foreach(var x in d1)
{
  if (d1.ContainsKey(x.Key))
    d1[x.Key].AddRange(x.Value);
  else
    d1.Add(x.Key, x.Value);
}

【讨论】:

【解决方案2】:

你可以试试

UNION 或 JOIN 方法合并结果

dictFinal.union 或 dictFinal.join

【讨论】:

    【解决方案3】:

    我会使用循环。假设合并意味着列表应该包含唯一的字符串:

    foreach (var kvp in dict)
    {
        List<string> listInDict2;
        if (dictFinal.TryGetValue(kvp.Key, out listInDict2))
            dictFinal[kvp.Key] = kvp.Value.Union(listInDict2).ToList();
        else
            dictFinal.Add(kvp.Key, kvp.Value);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2012-04-19
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2020-08-13
      • 2017-10-25
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多