NinaLabo

個人ゲーム開発者の技術メモ

【C#】リストや配列のソート方法まとめ

リスト(List)や 配列(Array)の 並び替えの方法をまとめました。

《CASE1》リスト内のオブジェクトの変数で並び替え

社員オブジェクト(Employee)を格納した 社員リスト(employeeList)があるとして、その社員リストを 社員番号(Employee.ID)で並び替えたい場合
 
【昇順】
employeeList.Sort ((ab) => a.ID - b.ID);
【降順】
employeeList.Sort ((ab) => b.ID - a.ID);
 

《CASE2》リストの値で並び替え 

社員番号だけを格納したリスト(idList)を並び替えたい場合
 
【昇順】
idList.Sort (); 
【降順】
idList.Sort ((ab) => b - a);

 

《CASE3》配列内のオブジェクトの変数で並び替え

社員オブジェクト(Employee)を格納した 社員配列(employeeArray)があるとして、その社員配列を 社員番号(Employee.ID)で並び替えたい場合
 
【昇順】

Array.Sort (employeeArray, (ab) => a.ID - b.ID);

 【降順】

Array.Sort (employeeArray, (ab) => b.ID - a.ID); 

Listとほぼ一緒ですね。Arrayクラスは System パッケージなので、"using System;" を記述しておく必要があります。

 

《CASE4》配列の値で並び替え

社員番号だけを格納した配列(idArray)を並び替えたい場合
 
【昇順】

Array.Sort (idArray);

 【降順】

Array.Sort (idArray, (ab) => b - a);


《CASE5》リスト内のオブジェクトを複数のキー(複合キー)で並び替え

社員オブジェクト(Employee)を格納した 社員リスト(employeeList)があるとして、その社員リストを 年齢(Employee.Age))順の 社員番号(Employee.ID)順で並び替えたい場合。
 
【昇順】
employeeList.Sort ((a, b) => {
    int result = a.Age - b.Age;
    return result != 0 ? result : a.ID - b.ID;
});
2つのオブジェクトの第1キー(Age)の差分を比較して値が同じ場合(差分が0の場合)は、第2キー(ID)での比較判定を行っています。