Check if Two Dictionary Objects Are Equal in C#

Understanding how to determine if two Dictionary objects are equal is an essential skill in C#. Dictionary objects play a pivotal role in storing data as key-value pairs. This article will guide you through different approaches to compare two Dictionary objects in C#.

Two dictionaries are considered equal if they have the same number of key-value pairs and each key-value pair in one dictionary is also present in the other dictionary.

Using SequenceEqual Method

One approach to check if two Dictionary objects are equal is by using the SequenceEqual method from the System.Linq namespace. However, since dictionaries do not guarantee order, you need to sort them first

Example

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>() {
         {"Three", 3},
         {"One", 1},
         {"Two", 2}
      };

      bool areEqual = dict1.OrderBy(kv => kv.Key).SequenceEqual(dict2.OrderBy(kv => kv.Key));

      Console.WriteLine("Dictionaries equal: " + areEqual);
   }
}

The output of the above code is

Dictionaries equal: True

This method orders both dictionaries by key using OrderBy before comparing them with SequenceEqual. While functional, this approach has performance overhead due to the sorting operation.

Using Count and ContainsKey Methods

A more efficient approach is to check the count first, then iterate through one dictionary and verify each key-value pair exists in the other

Example

using System;
using System.Collections.Generic;

public class Program {
   public static bool AreDictionariesEqual<TKey, TValue>(Dictionary<TKey, TValue> dict1, Dictionary<TKey, TValue> dict2) {
      if (dict1.Count != dict2.Count)
         return false;

      foreach (var kvp in dict1) {
         if (!dict2.ContainsKey(kvp.Key) || !dict2[kvp.Key].Equals(kvp.Value))
            return false;
      }
      return true;
   }

   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>() {
         {"Three", 3},
         {"One", 1},
         {"Two", 2}
      };

      Dictionary<string, int> dict3 = new Dictionary<string, int>() {
         {"One", 1},
         {"Two", 5},
         {"Three", 3}
      };

      Console.WriteLine("dict1 equals dict2: " + AreDictionariesEqual(dict1, dict2));
      Console.WriteLine("dict1 equals dict3: " + AreDictionariesEqual(dict1, dict3));
   }
}

The output of the above code is

dict1 equals dict2: True
dict1 equals dict3: False

Using LINQ Except Method

Another efficient approach uses the Except method to find differences between dictionaries

Example

using System;
using System.Collections.Generic;
using System.Linq;

public class Program {
   public static bool AreDictionariesEqual<TKey, TValue>(Dictionary<TKey, TValue> dict1, Dictionary<TKey, TValue> dict2) {
      return dict1.Count == dict2.Count && !dict1.Except(dict2).Any();
   }

   public static void Main() {
      Dictionary<string, int> dict1 = new Dictionary<string, int>() {
         {"Apple", 10},
         {"Banana", 20},
         {"Cherry", 30}
      };

      Dictionary<string, int> dict2 = new Dictionary<string, int>() {
         {"Cherry", 30},
         {"Apple", 10},
         {"Banana", 20}
      };

      Dictionary<string, int> dict3 = new Dictionary<string, int>() {
         {"Apple", 10},
         {"Banana", 25}
      };

      Console.WriteLine("dict1 equals dict2: " + AreDictionariesEqual(dict1, dict2));
      Console.WriteLine("dict1 equals dict3: " + AreDictionariesEqual(dict1, dict3));
   }
}

The output of the above code is

dict1 equals dict2: True
dict1 equals dict3: False

Comparison of Methods

Method Performance Complexity Best For
SequenceEqual with OrderBy O(n log n) Simple Small dictionaries
Manual iteration O(n) Medium Large dictionaries
LINQ Except O(n) Simple General purpose

Conclusion

There are multiple ways to compare Dictionary objects in C#. The LINQ Except method provides the best balance of simplicity and performance, while manual iteration offers the most control. Choose the approach that best fits your specific requirements and performance needs.

Updated on: 2026-03-17T07:04:36+05:30

8K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements