用键值对(B)中匹配键的值替换键值对(A)的值?

时间:2012-08-23 15:14:09

标签: c# dictionary

我在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中实现,但我仍然只是一个初学者,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

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

编辑看起来原始代码在经过InvalidOperationException循环时抛出foreach,认为该集合已被修改。有关详细信息,请参阅this question。 <{1}}是必需的。

答案 1 :(得分:2)

这是另一个稍微紧凑的选项:

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