c# - 如何在 C# 中比较两个字典

标签 c# algorithm dictionary data-structures collections

我有两个通用词典。两者具有相同的键,但它们的值可以不同。我想比较第二本词典和第一本词典。如果它们的值之间存在差异,我想将这些值存储在单独的字典中。

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/

相关文章:

c# - 如何查找Skydrive文件夹的文件夹ID

c# - 在列表 C# 中查找最佳匹配实例的最佳实践

c# - 替换 Windows 窗体中默认的未处理错误对话框

ruby - 最好的基于(单词或字符)的差异算法是什么?

C++ 映射键/迭代器操作

Python:操作字典和 JSON 时出错(字符串索引必须是整数,而不是 unicode)

c# - 删除 WCFTestClient 的缓存 - 适用于 Visual Studio 2010

algorithm - Rabin Karp算法的一点修改版本的可行性

algorithm - 使用 Scala 抛硬币

python - 将 CSV 转换为 JSON。如何保持具有相同索引的值?