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