📅  最后修改于: 2023-12-03 15:10:51.523000             🧑  作者: Mango
在C#中,我们可以使用SortedDictionary<TKey, TValue>
类来存储键值对,其中TKey
表示键的类型,TValue
表示值的类型。在开发过程中,有时候需要检查两个SortedDictionary
对象是否相等,本文将介绍如何实现该功能。
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
// 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
方法,更加简洁简单。