查找两个词典之间缺少的条目

时间:2016-06-15 18:37:56

标签: c# .net dictionary

假设我有两个词典:

Dictionary<int, int> a = new Dictionary<int, int>(), b = new Dictionary<int, int>();
a.Add(1, 1);
a.Add(2, 2);
a.Add(3, 3);
b.Add(1, 1);
b.Add(2, 2);

提取它们之间的区别并以Dictionary<int, int>类型返回它的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这样的东西?

var dict3 = dict1.Except(dict2).Concat(dict2.Except(dict1);

或者:

如果您已经检查过密钥是否相同,则可以使用:

var dict3 = dict2.Where(entry => dict1[entry.Key] != entry.Value)
                 .ToDictionary(entry => entry.Key, entry => entry.Value);

要解释,这将:

  • 迭代dict2中的键/值对
  • 对于每个条目,在dict1中查找值并过滤掉两个值相同的任何条目
  • 从剩下的条目(即dict1值不同的条目)中形成一个字典,方法是从每对中获取密钥和值,就像它们在dict2中出现一样。

请注意,这可以避免依赖于KeyValuePair<TKey, TValue>的相等性 - 可能可以依赖它,但我个人觉得这更清楚。 (当你为词典键使用自定义相等比较器时它也会起作用 - 尽管你也需要将它传递给ToDictionary。)