C# で辞書間の等価性をテストする 質問する

C# で辞書間の等価性をテストする 質問する

辞書のキーと値に equals メソッドと hash メソッドが正しく実装されていると仮定した場合、2 つの辞書の等価性をテストする最も簡潔で効率的な方法は何でしょうか?

この文脈では、2 つの辞書が同じキー セット (順序は重要ではない) を含み、そのようなキーごとに値が一致する場合、それらの辞書は等しいと言われます。

私が思いついた方法をいくつか紹介します(おそらく他にもたくさんあるでしょう)。

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()));
}

ベストアンサー1

dic1.Count == dic2.Count && !dic1.Except(dic2).Any();

おすすめ記事