如何在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

回到顶部