二つの配列を比較する

2021/09/02に公開

C# で二つのオブジェクトを比較する」で配列の比較に SequenceEqual を使いました。
今しがた array.cs を見て知ったのですが、配列は IStructuralEquatable インターフェイス というインターフェースを実装しています。

今度はこれを使って比較してみます。

var a = new[] { 1, 2, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(a == b);
Console.WriteLine(EqualityComparer<int[]>.Default.Equals(a, b));
Console.WriteLine(StructuralComparisons.StructuralEqualityComparer.Equals(a, b));

結果は次のようになります。

False
False
True

StructuralComparisons を使うと同じ要素を持つ配列が等しいものと判定されました。
ついでに List<T> も比較してみます。

var a = new[] { 1, 2, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(StructuralComparisons.StructuralEqualityComparer.Equals(a.ToList(), b.ToList()));
False

ダメでした。
List<T>IStructuralEquatable を実装していないからですね。

せっかくみつけたインターフェースですが、使い道はあまり無いようです。
タプルもこのインターフェースを実装しているので、要素の詳細のわからないタプル同士の比較が必要な時には使えるかもしれません。

執筆日: 2018/04/02

GitHubで編集を提案

Discussion