我有两个通用字典。两个都有相同的键。但是值可以不同。我想比较第二个字典和第一个字典。如果值之间有差异,我想将这些值存储在单独的字典中。
1st Dictionary ------------ key Value Barcode 1234566666 Price 20.00 2nd Dictionary -------------- key Value Barcode 1234566666 Price 40.00 3rd Dictionary -------------- key Value Price 40
任何人都可以给我一个最好的算法来做到这一点。我写了一个算法,但是它有很多循环。我正在寻找一个简短而有效的想法,就像使用LINQ查询表达式或LINQ lamda表达式的解决方案一样。我正在C#中使用.Net Framework 3.5。我发现了一些关于Except()方法的东西。但是不幸的是我不明白这种方法正在发生什么。如果有人解释建议的算法,那就太好了。
如果您已经检查过密钥是否相同,则可以使用:
var dict3 = dict2.Where(entry => dict1[entry.Key] != entry.Value) .ToDictionary(entry => entry.Key, entry => entry.Value);
为了说明,这将:
dict2
dict1
请注意,这避免了依赖于-的相等性KeyValuePair<TKey, TValue>, 也 可以依靠它,但是我个人觉得更清楚。(当您将自定义的相等比较器用于字典键时,它也将起作用- 尽管您也需要将其传递给ToDictionary。)
KeyValuePair<TKey, TValue>
ToDictionary