如何在C#中比较两个字典
我有两个通用字典。两个都有相同的键。但是值可以不同。我想比较第二个字典和第一个字典。如果值之间有差异,我想将这些值存储在单独的字典中。
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
两个值相同的条目,并过滤掉其中的任何条目 dict1
通过从每对中获取键和值,就像它们在中出现一样,从其余条目(即,值不同的条目)中形成字典dict2
。
请注意,这避免了依赖于-的相等性KeyValuePair<TKey, TValue>
, 也 可以依靠它,但是我个人觉得更清楚。(当您将自定义的相等比较器用于字典键时,它也将起作用-
尽管您也需要将其传递给ToDictionary
。)
以上是 如何在C#中比较两个字典 的全部内容, 来源链接: utcz.com/qa/426113.html