この記事は公開から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)
になるような処理したほうが良いかも知れません。
以上です。