C# 中檢查兩個字典物件是否相等
瞭解如何確定兩個 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) { // Check whether the dictionaries are equal 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("Dictionaries equal: " + areEqual); } }
在此示例中,我們建立了一個自定義相等比較器,它實現了 IEqualityComparer 介面。Equals 方法檢查兩個字典是否具有相同數量的元素,以及第一個字典中是否存在任何不在第二個字典中的元素。GetHashCode 方法計算字典的雜湊碼,用於效能最佳化。
輸出
Dictionaries equal: True
結論
在 C# 中,您可以使用 SequenceEqual 方法或自定義 EqualityComparer 來檢查兩個 Dictionary 物件是否相等。雖然 SequenceEqual 方法快速便捷,但如果字典的鍵值對順序不同,則它可能無法正常工作。在這種情況下,自定義 EqualityComparer 可以提供更準確的比較。