読者です 読者をやめる 読者になる 読者になる

AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

c#で順不同な配列比較

技術ネタ 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だろう。ただし同じシーケンスが重複していたりとかそういう場面ではダメ。一応配列要素数も比較しておくことにしてまとめておいた

追記

要素重複が起こらないならソートして比較すればいいってことに何故気づかなかったのか

c#の配列比較