作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有两个通用词典。两者具有相同的键,但它们的值可以不同。我想比较第二本词典和第一本词典。如果它们的值之间存在差异,我想将这些值存储在单独的字典中。
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 lambda 表达式的解决方案。我在 C# 中使用 .NET Framework 3.5。我找到了一些关于 Except()
方法的信息,但不幸的是我无法理解该方法发生了什么。如果有人能解释建议的算法,那就太好了。
最佳答案
如果您已经检查过 key 是相同的,您可以使用:
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# - 如何在 C# 中比较两个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547351/
我是一名优秀的程序员,十分优秀!