Проверка на равенство между словарями в C #

Предполагая, что ключи и значения словаря имеют свои методы равенства и хэш-методы, реализованные правильно, какой самый краткий и эффективный способ проверить равенство двух словарей?

В этом контексте два словаря считаются равными, если они содержат тот же набор ключей (порядок не важен), и для каждого такого ключа они согласовывают значение.

вот несколько способов, которые я придумал (вероятно, их намного больше):

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()));
}
56
задан rony l 28 September 2010 в 16:16
поделиться