✅
二つの配列を比較する
「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
Discussion