【问题标题】:replace values of key value pair(A) with values of matching keys in key value pair(B)?用键值对(B)中匹配键的值替换键值对(A)的值?
【发布时间】:2012-08-23 15:14:08
【问题描述】:

我在 C# 中有 2 个字典(键值对对象)。我想比较字典 A 和 B 并对两个字典中的任何键执行以下操作:
1.将字典A中的值替换为字典B中的值
2.从字典B中删除匹配键

一个例子如下:

初始字典:

A={" Key1:value1 "," Key2:value2 "}
B={" Key3:bla "," key1:hello "," Key4:bla "," Key2:world "}

之后:

A={" Key1:hello "," Key2:world "}
B={" Key3:bla "," Key4:bla "}

我想知道最好的方法,我确信这可以在 LINQ 中实现,但我仍然只是一个初学者,非常感谢任何帮助。

【问题讨论】:

    标签: c# dictionary


    【解决方案1】:

    不确定 Ani 的答案去了哪里,但这里有一个类似的解决方案:

    foreach (var k in A.Keys.ToList())
    {
        if (B.ContainsKey(k))
        {
            A[k] = B[k];
            B.Remove(k);
        }
    }
    

    edit 看起来原始代码在通过foreach 循环时抛出了InvalidOperationException,认为该集合已被修改。有关详细信息,请参阅this questionToList() 为必填项。

    【讨论】:

      【解决方案2】:

      这是另一个更紧凑的选项:

          var keys = dictionaryA.Keys.Where(x => dictionaryB.Keys.Contains(x)).ToArray();
          foreach(var key in keys)
          {
               dictionaryA[key] = dictionaryB[key];
               dictionaryB.Remove(key);
          }
      

      【讨论】:

        猜你喜欢
        • 2020-06-28
        • 2021-12-11
        • 2014-09-25
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多