📜  检查两个SortedDictionary对象在C#中是否相等(1)

📅  最后修改于: 2023-12-03 15:10:51.523000             🧑  作者: Mango

检查两个SortedDictionary对象在C#中是否相等

在C#中,我们可以使用SortedDictionary<TKey, TValue>类来存储键值对,其中TKey表示键的类型,TValue表示值的类型。在开发过程中,有时候需要检查两个SortedDictionary对象是否相等,本文将介绍如何实现该功能。

方法1:使用DictionaryEqualityComparer
using System.Collections.Generic;

public class DictionaryEqualityComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
{
    public bool Equals(IDictionary<TKey, TValue> x, IDictionary<TKey, TValue> y)
    {
        if (x == null || y == null || x.Count != y.Count)
            return false;

        foreach (var kvp in x)
        {
            if (!y.TryGetValue(kvp.Key, out TValue value) || !value.Equals(kvp.Value))
                return false;
        }

        return true;
    }

    public int GetHashCode(IDictionary<TKey, TValue> obj)
    {
        int hash = 0;

        foreach (var kvp in obj)
        {
            hash ^= kvp.Key.GetHashCode() ^ kvp.Value.GetHashCode();
        }

        return hash;
    }
}

// Usage
var dict1 = new SortedDictionary<int, string>();
dict1.Add(1, "one");
dict1.Add(2, "two");

var dict2 = new SortedDictionary<int, string>();
dict2.Add(1, "one");
dict2.Add(2, "two");

var comparer = new DictionaryEqualityComparer<int, string>();
bool result = comparer.Equals(dict1, dict2);

Console.WriteLine(result); // output: True
方法2:使用LINQ
// Usage
var dict1 = new SortedDictionary<int, string>();
dict1.Add(1, "one");
dict1.Add(2, "two");

var dict2 = new SortedDictionary<int, string>();
dict2.Add(1, "one");
dict2.Add(2, "two");

bool result = dict1.SequenceEqual(dict2);

Console.WriteLine(result); // output: True

以上是两种比较SortedDictionary是否相等的方法,可以根据需要选择使用哪一种。方法1使用了自定义的DictionaryEqualityComparer类,需要手动实现IEqualityComparer接口;方法2使用了LINQ的SequenceEqual方法,更加简洁简单。