Check if two SortedDictionary objects are equal in C#

SortedDictionary in C# is a binary tree-based implementation that maintains its elements in key order. It is a collection of key/value pairs that are sorted on the basis of the key. This article will guide you step-by-step on how to check if two SortedDictionary objects are equal in C#.

Understanding SortedDictionary in C#

A SortedDictionary<TKey, TValue> is a binary tree-based collection in C# that stores key-value pairs in sorted order of the keys. It's part of the System.Collections.Generic namespace and provides O(log n) performance for most operations.

Here is an example of a SortedDictionary

SortedDictionary<string, int> sortedDict = new SortedDictionary<string, int>() {
   {"One", 1},
   {"Two", 2},
   {"Three", 3}
};

Using SequenceEqual Method

The simplest way to check if two SortedDictionary objects are equal is to use the SequenceEqual method from the System.Linq namespace. Since SortedDictionary automatically maintains the order of elements based on the key, you can directly use SequenceEqual to compare them.

Example

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

public class Program {
   public static void Main() {
      SortedDictionary<string, int> sortedDict1 = new SortedDictionary<string, int>() {
         {"One", 1},
         {"Two", 2},
         {"Three", 3}
      };

      SortedDictionary<string, int> sortedDict2 = new SortedDictionary<string, int>() {
         {"One", 1},
         {"Two", 2},
         {"Three", 3}
      };

      SortedDictionary<string, int> sortedDict3 = new SortedDictionary<string, int>() {
         {"One", 1},
         {"Two", 2},
         {"Four", 4}
      };

      bool areEqual1 = sortedDict1.SequenceEqual(sortedDict2);
      bool areEqual2 = sortedDict1.SequenceEqual(sortedDict3);
      
      Console.WriteLine("sortedDict1 equals sortedDict2: " + areEqual1);
      Console.WriteLine("sortedDict1 equals sortedDict3: " + areEqual2);
   }
}

The output of the above code is

sortedDict1 equals sortedDict2: True
sortedDict1 equals sortedDict3: False

Using Manual Comparison

For more control over the comparison logic, you can manually check if two SortedDictionary objects have the same keys and values

Example

using System;
using System.Collections.Generic;

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

      foreach (var pair in dict1) {
         if (!dict2.TryGetValue(pair.Key, out TValue value) || 
             !EqualityComparer<TValue>.Default.Equals(pair.Value, value)) {
            return false;
         }
      }
      return true;
   }

   public static void Main() {
      SortedDictionary<string, int> sortedDict1 = new SortedDictionary<string, int>() {
         {"Apple", 5},
         {"Banana", 3},
         {"Cherry", 8}
      };

      SortedDictionary<string, int> sortedDict2 = new SortedDictionary<string, int>() {
         {"Apple", 5},
         {"Banana", 3},
         {"Cherry", 8}
      };

      SortedDictionary<string, int> sortedDict3 = new SortedDictionary<string, int>() {
         {"Apple", 5},
         {"Banana", 7},
         {"Cherry", 8}
      };

      bool result1 = AreDictionariesEqual(sortedDict1, sortedDict2);
      bool result2 = AreDictionariesEqual(sortedDict1, sortedDict3);

      Console.WriteLine("sortedDict1 equals sortedDict2: " + result1);
      Console.WriteLine("sortedDict1 equals sortedDict3: " + result2);
   }
}

The output of the above code is

sortedDict1 equals sortedDict2: True
sortedDict1 equals sortedDict3: False

Using Custom EqualityComparer

For more advanced scenarios, you can create a custom IEqualityComparer to define specific comparison logic

Example

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

class DictionaryComparer<TKey, TValue> : IEqualityComparer<SortedDictionary<TKey, TValue>> {
   public bool Equals(SortedDictionary<TKey, TValue> x, SortedDictionary<TKey, TValue> y) {
      if (x == null && y == null) return true;
      if (x == null || y == null) return false;
      
      return x.Count == y.Count && !x.Except(y).Any();
   }

   public int GetHashCode(SortedDictionary<TKey, TValue> obj) {
      if (obj == null) return 0;
      
      int hash = 0;
      foreach (var pair in obj) {
         hash ^= pair.GetHashCode();
      }
      return hash;
   }
}

public class Program {
   public static void Main() {
      SortedDictionary<string, int> sortedDict1 = new SortedDictionary<string, int>() {
         {"One", 1},
         {"Two", 2},
         {"Three", 3}
      };

      SortedDictionary<string, int> sortedDict2 = new SortedDictionary<string, int>() {
         {"Three", 3},
         {"One", 1},
         {"Two", 2}
      };
      
      DictionaryComparer<string, int> comparer = new DictionaryComparer<string, int>();
      bool areEqual = comparer.Equals(sortedDict1, sortedDict2);

      Console.WriteLine("SortedDictionaries equal: " + areEqual);
      Console.WriteLine("Note: Order of insertion doesn't matter - SortedDictionary sorts by key");
   }
}

The output of the above code is

SortedDictionaries equal: True
Note: Order of insertion doesn't matter - SortedDictionary sorts by key

Comparison Methods Overview

Method Advantages Use Case
SequenceEqual Simple, leverages built-in ordering Quick equality check for identical structures
Manual Comparison Full control over comparison logic Custom value comparison or performance optimization
Custom EqualityComparer Reusable, works with LINQ and collections Complex comparison scenarios or null handling

Conclusion

You can check if two SortedDictionary objects are equal using SequenceEqual for simple cases, manual comparison for custom logic, or custom IEqualityComparer for reusable advanced scenarios. Choose the method based on your specific requirements for performance and comparison complexity.

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

412 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements