ホームに戻る
関連 :
コレクション [C#]配列
目次 :

コレクションのソート

固定長配列を含むコレクションにソート関数を適用することで、要素を並べ替えることができる。
特に指定が無ければ昇順で並べられる。

固定長配列(Array)

Array.Sort() を用いる。
// 配列の宣言・初期化 int[] arrSample = {3, 5, 2, 1, 4}; // 配列のソート( Array.Sort() ) Array.Sort(arrSample); //< { 3, 5, 2, 1, 4 } ⇒ { 1, 2, 3, 4, 5 }

List

// 配列の宣言・初期化 List<int> listSample = new List<int> {3, 5, 2, 1, 4}; // Listのソート( Sort() ) listSample.Sort(); //< { 3, 5, 2, 1, 4 } ⇒ { 1, 2, 3, 4, 5 }

構造を持つデータのソート

数値や文字列と異なり、クラスや構造体、タプルの場合は値を単純に比較できないので、
比較基準を関数として規定し、Sort() 関数に渡す必要がある。
比較関数は同型の引数二つをとり、両者の序列(昇順)を戻り値として返す。
序列戻り値
引数1が引数2よりも前
(引数1 < 引数2)
引数1と引数2が同等0
引数1が引数2よりも後
(引数1 > 引数2)
private void Hoge() { // string, DateTime, DateTime のタプル List<(string reason, DateTime begin, DateTime end)> sorted = new List<(string reason, DateTime begin, DateTime end)>(); foreach (var item in plans) { sorted.Add(item.cb_Reason.Text, item.dtp_Begin.Value.Date, item.dtp_End.Value.Date); } // 比較関数を渡してソート sorted.Sort(Compare); : } // コレクションソート用比較関数 private int Compare((string reason, DateTime begin, DateTime end) row1, (string reason, DateTime begin, DateTime end) row2) { // reason を比較に用いる // 空文字列であれば序列が後 var r1r = row1.reason; var r2r = row2.reason; if (r1r == "" && r2r == "") { return 0; } if (r1r == "") { return 1; } if (r2r == "") { return -1; } : }