在 C# 中检查两个 Dictionary 对象是否相等
了解如何确定两个 Dictionary 对象是否相等是 C# 中的一项基本技能。Dictionary 对象在将数据存储为键值对方面起着关键作用。本文将指导您逐步比较 C# 中的两个 Dictionary 对象。在本文结束时,您将了解如何准确有效地确定两个 Dictionary 对象是否相等。
在深入研究之前,需要注意的是,如果两个字典具有相同数量的键值对,并且一个字典中的每个键值对也存在于另一个字典中,则这两个字典被视为相等。
使用 SequenceEqual 方法
检查两个 Dictionary 对象是否相等的最简单方法之一是使用 System.Linq 命名空间中的 SequenceEqual 方法。
示例
这是一个简单示例 −
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { Dictionary<string, int> dict1 = new Dictionary<string, int>() { {"One", 1}, {"Two", 2}, {"Three", 3} }; Dictionary<string, int> dict2 = new Dictionary<string, int>() { {"One", 1}, {"Two", 2}, {"Three", 3} }; bool areEqual = dict1.OrderBy(kv => kv.Key).SequenceEqual(dict2.OrderBy(kv => kv.Key)); Console.WriteLine("Dictionaries equal: " + areEqual); } }
在此代码片段中,我们首先使用 OrderBy 方法按键对字典进行排序。然后,我们使用 SequenceEqual 方法确定两个有序序列是否相等。如果两个字典相等,则向控制台输出"Dictionaries equal: True"。
输出
Dictionaries equal: True
但是,此方法假定字典的键值对顺序相同。如果顺序不同,则无法正常工作。
使用自定义 EqualityComparer
对于更复杂的情况,或者当字典的键值对顺序可能不同时,您可能需要使用自定义 EqualityComparer。
示例
以下是示例 −
using System; using System.Collections.Generic; using System.Linq; class DictionaryComparer<TKey, TValue> : IEqualityComparer<Dictionary<TKey, TValue>> { public bool Equals(Dictionary<TKey, TValue> x, Dictionary<TKey, TValue> y) { // 检查字典是否相等 return x.Count == y.Count && !x.Except(y).Any(); } public int GetHashCode(Dictionary<TKey, TValue> obj) { int hash = 0; foreach (var pair in obj) { hash ^= pair.GetHashCode(); } return hash; } } public class Program { public static void Main() { Dictionary<string, int> dict1 = new Dictionary<string, int>() { {"One", 1}, {"Two", 2}, {"Three", 3} }; Dictionary<string, int> dict2 = new Dictionary<string, int>() { {"One", 1}, {"Two", 2}, {"Three", 3} }; DictionaryComparer<string, int> comparer = new DictionaryComparer<string, int>(); bool areEqual = comparer.Equals(dict1, dict2); Console.WriteLine("字典相等: " + areEqual); } }
在此示例中,我们创建了一个实现 IEqualityComparer 接口的自定义相等性比较器。Equals 方法检查两个字典是否具有相同数量的元素,以及第一个字典中是否存在第二个字典中不存在的元素。GetHashCode 方法计算字典的哈希码,用于性能优化。
输出
字典相等:True
结论
在 C# 中,您可以使用 SequenceEqual 方法或自定义 EqualityComparer 检查两个 Dictionary 对象是否相等。虽然 SequenceEqual 方法快速简便,但如果字典的键值对顺序不同,它可能无法正常工作。在这种情况下,自定义 EqualityComparer 可以提供更准确的比较。