📅  最后修改于: 2023-12-03 15:10:51.562000             🧑  作者: Mango
在C#中,Dictionary是一个非常有用的数据结构。如果需要在代码中比较两个字典对象是否相等,可以使用以下方法:
SequenceEqual()
方法Dictionary类实现了IEnumerable<KeyValuePair<TKey, TValue>>接口,所以可以使用Linq的SequenceEqual()方法来比较两个Dictionary对象是否相同。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var dict1 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "orange" },
{ 3, "banana" }
};
var dict2 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "orange" },
{ 3, "banana" }
};
var dict3 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "grape" },
{ 3, "banana" }
};
Console.WriteLine(dict1.SequenceEqual(dict2)); // True
Console.WriteLine(dict1.SequenceEqual(dict3)); // False
}
}
IEqualityComparer
接口另一种比较两个字典是否相等的方法是实现IEqualityComparer
接口,并将其传递给Dictionary<TKey, TValue>
的构造函数。
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
var dict1 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "orange" },
{ 3, "banana" }
};
var dict2 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "orange" },
{ 3, "banana" }
};
var dict3 = new Dictionary<int, string>
{
{ 1, "apple" },
{ 2, "grape" },
{ 3, "banana" }
};
var comparer = new DictionaryComparer<int, string>();
Console.WriteLine(comparer.Equals(dict1, dict2)); // True
Console.WriteLine(comparer.Equals(dict1, dict3)); // False
}
class DictionaryComparer<TKey, TValue> : IEqualityComparer<Dictionary<TKey, TValue>>
{
public bool Equals(Dictionary<TKey, TValue> x, Dictionary<TKey, TValue> y)
{
if (x.Count != y.Count)
{
return false;
}
foreach (var pair in x)
{
TValue value;
if (y.TryGetValue(pair.Key, out value))
{
if (!pair.Value.Equals(value))
{
return false;
}
}
else
{
return false;
}
}
return true;
}
public int GetHashCode(Dictionary<TKey, TValue> obj)
{
int hash = 0;
foreach (var pair in obj)
{
hash ^= pair.Key.GetHashCode() ^ pair.Value.GetHashCode();
}
return hash;
}
}
}
上面的示例中,我们实现了IEqualityComparer<Dictionary<TKey, TValue>>
接口,并将其传递给了Dictionary<int, string>
的构造函数。Equals()
方法现在会比较两个字典对象是否相等,并返回一个布尔值。GetHashCode()
方法返回一个哈希码,用于快速比较两个字典对象是否相等。
这两种方法都可以用来比较两个字典对象是否相等。使用哪个方法取决于您的具体需求和标准。