3

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

4

2 回答 2

3

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

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

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

于 2012-08-23T15:32:35.817 回答
2

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

    var keys = dictionaryA.Keys.Where(x => dictionaryB.Keys.Contains(x)).ToArray();
    foreach(var key in keys)
    {
         dictionaryA[key] = dictionaryB[key];
         dictionaryB.Remove(key);
    }
于 2012-08-23T15:45:24.863 回答