关于c#:将键值对(A)的值替换为键值对(B)中匹配键的值?

replace values of key value pair(A) with values of matching keys in key value pair(B)?

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

示例如下:

初始词典:

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

之后:

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

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


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

1
2
3
4
5
6
7
8
foreach (var k in A.Keys.ToList())
{
    if (B.ContainsKey(k))
    {
        A[k] = B[k];
        B.Remove(k);
    }
}

编辑它看起来像原始代码在通过foreach循环时抛出InvalidOperationException,认为集合已被修改。有关详细信息,请参阅此问题。需要ToList()


这里还有一个稍微紧凑一点的选项:

1
2
3
4
5
6
    var keys = dictionaryA.Keys.Where(x => dictionaryB.Keys.Contains(x)).ToArray();
    foreach(var key in keys)
    {
         dictionaryA[key] = dictionaryB[key];
         dictionaryB.Remove(key);
    }