整数型に対する Compare の実装
東方算程譚より.
int[] target = { 4, 5, 3, 1, 2 }; Array.Sort(target, delegate (int x, int y) { return record[x] - record[y];});
んー,この場合だと動きますが,オーバーフローやアンダーフローが微妙にやばそげな.
.NET のクラスライブラリで,比較述語というと,
- this > that なら正値を
- this == that なら 0 を
- this < that なら負値
を返すのが基本です.この判定ですが,場合によっては,整数引き算で代用することもできるでしょう.が,Integer Overflow 絡みのセキュリティーホールが世をにぎわす昨今,個人的には System.Collections.Generic.Comparer
Array.Sort(target, delegate (int x, int y) { return Comparer<int>.Default.Compare(record[x], record[y]);});
手元のソースは .NET 2.0 が出たときにあらかた書き換えたんですが,古いところだと結構残ってるかも.
あー,@IT の .NET Tips,『自作クラスによる配列をソート(並べ替え)するには?』あたりも引き算か.まあこの例も Length プロパティなので動きはしますが,注意した方が良い部分ではありますね.
追記
インライン展開を期待するなら,以下のように書く方が良いでしょう.
Array.Sort(target, delegate (int x, int y) { return record[x].CompareTo(record[y]) ;});