c#で順不同な配列比較
c# LINQと拡張メソッド追加に関して - AccessViolation Exception
に更新されました。
順不同な組み合わせでも一致させたい配列比較する機会があったのでメモ。
var arr1 = new byte[]{ 0x08, 0xff}; var arr2 = new byte[]{ 0xff, 0x08};
があった時に
arr1 == arr2; arr1.Equals(arr2);
が通じないのはわかる。どうせarr1 == arr1でtrueなんでしょみたいな
じゃあ中身比較するにはどうすればという時はいつもこれ
arr1.SequenceEqual(arr2)
こいつは配列の完全一致には使えるけど今回みたいに順序が入れ替えてあるとダメだった。
のでAllを使って雑なことをすれば
arr1.All(x => arr2.Contains(x))
まぁtrueだろう。ただし同じシーケンスが重複していたりとかそういう場面ではダメ。一応配列要素数も比較しておくことにしてまとめておいた
追記
要素重複が起こらないならソートして比較すればいいってことに何故気づかなかったのか