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