Тестирование на равенство между словарями в c #
Предполагая, что для ключей и значений словаря правильно реализованы методы equals и hash, каков наиболее краткий и эффективный способ проверки на равенство двух словарей?
В этом контексте два словаря называются равными, если они содержат одинаковый набор ключей (порядок не важен), и для каждого такого ключа они согласуются по значению.
Вот несколько способов, которыми я придумал (возможно, их гораздо больше):
public bool Compare1<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey,TValue> dic2)
{
return dic1.OrderBy(x => x.Key).
SequenceEqual(dic2.OrderBy(x => x.Key));
}
public bool Compare2<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Count == dic2.Count &&
dic1.Intersect(dic2).Count().
Equals(dic1.Count));
}
public bool Compare3<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Intersect(dic2).Count().
Equals(dic1.Union(dic2).Count()));
}