2つ目は、SortメソッドとComparison<T>デリゲートを組み合わせる方法です。 Sortメソッドに特に引数を指定しない場合、Sortメソッドはデフォルト(つまり昇順)の並び替え順序でソートします。 Sortメソッドの引数に並び替え順序を定義したメソッドを表すComparison<T>デリゲートを指定すると、その順序に従ってソートするようになります。
したがって、降順に並び替えるよう動作を定義するメソッドを用意してそれをSortメソッドに渡すことにより、降順にソートする事ができます。 なお、この方法はComparison<T>デリゲートを引数にとることが出来るArray.SortメソッドとList.Sortメソッドで使うことが出来ます。 (ArrayList.SortメソッドではIComparerを指定する必要があります)
SortメソッドとComparison<T>デリゲートを使ってListを降順にソートする
using System;
using System.Collections.Generic;
class Sample {
// 二つのintを比較するためのメソッド
static int CompareDescending(int x, int y)
{
return y.CompareTo(x);
// 単に次のようにしても同じ結果となる
// return y - x;
// return -x.CompareTo(y);
// 参考までに、昇順の場合は次のように記述する
// return x.CompareTo(y);
// return x - y;
}
static void Main()
{
// ソート対象のList<int>
var list = new List<int>(new int[] {5, 2, 3, 1, 4});
// ソート
list.Sort(CompareDescending);
foreach (var val in list) {
Console.Write("{0}, ", val);
}
Console.WriteLine();
}
}
実行結果
5, 4, 3, 2, 1,
SortメソッドとComparison<T>デリゲートについては、複合型のソート・複数キーでのソートでも改めて解説します。
Sortメソッドと型ごとのデフォルトのソート順については基本型とデフォルトのソート順で解説しています。