トップC# > 配列のソート

配列のソート

はじめに

以前のプログラムでは配列 OSM[] osms のソートを

  Array.Sort(osms, (a,b) => a.zorder-b.zorder);    // zorderで並び替え
としていた。

プログラムの仕様を変更したため、配列の範囲指定が必要になった。マニュアル[2]を見ると、 Sortの引数には IComparer のケースと Comparison のケースがある。一読では、両者の違いが判然としなかった。

少し手の込んだソートを行う場合、よく理解しておく必要があるため、「配列の操作」とはページを分けておく。

範囲指定のソート

Comparison の場合はメソッド指定であり、ラムダ式でもよい。 IComparer はインタフェースであり、その実装を別途指定するということであろう。 Array.Sortメソッドには IComparer の場合には、 配列のソート範囲を指定できるが、Comparison の場合には範囲していができない[2]。

したがって、IComparer を使う。

class ZorderComparer : System.Collections.IComparer {
    public int Compare(object a, object b) {
	return ((OSM)a).zorder - ((OSM)b).zorder;
    }
}
  Array.Sort(osms, 0, tile.ixRecord, new ZorderComparer());    // zorderで並び替え

リファレンス

[1] [C#]Array.Sort(keys, items) のススメ
[2] Array.Sort メソッド
[3] 配列やコレクション内の要素を並び替える