.NETで2つのDictionaryの完全一致判定をLINQで行なう方法

この記事は公開から4年以上経過しています。

.NETで2つのDictionary<TKey, TValue>のキーと値が一致するかをLINQ1行で判定する方法です。

サンプルソースコード

C#

var dic1 = new Dictionary<int, string>()
{
    {1, "test01"},
    {2, "test02"},
    {3, "test03"},
};
var dic2 = new Dictionary<int, string>()
{
    {1, "test01"},
    {2, "test02"},
    {3, "test03"},
};

Console.WriteLine(dic1.OrderBy((o) => o.Key).SequenceEqual(dic2.OrderBy((o) => o.Key)));

VB.NET

Dim dic1 As New Dictionary(Of Integer, String) From
{
    {1, "TEST01"},
    {2, "TEST02"},
    {3, "TEST03"}
}
Dim dic2 As New Dictionary(Of Integer, String) From
{
    {1, "TEST01"},
    {2, "TEST02"},
    {3, "TEST03"}
}

Console.WriteLine(dic1.OrderBy(Function(o) o.Key).SequenceEqual(dic2.OrderBy(Function(o) o.Key)))

DictionaryをキーでソートしてSequenceEquals()で比較するだけなのでお手軽です。

ただし、OrderBy()で辞書をソートする場合は2つの辞書のソートと比較ループを加えた時間が実行コストになりますので、パフォーマンス重視であれば自前ループでO(n)になるような処理したほうが良いかも知れません。

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする