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 可以提供更準確的比較。

更新於:2023年7月24日

5K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告