LINQ を使用せずに配列を並べ替えるには、Array.Sort
shared メソッドを使用できます。If には、配列の並べ替え方法をカスタマイズできる多くのオーバーロードがあります。この場合、お勧めする 2 つのオーバーロードは、IComparer(Of T)
オブジェクトを受け取るオーバーロードか、Comparison(Of T)
デリゲートを受け取るオーバーロードのいずれかです。
並べ替えIComparer(Of T)
このIComparer(Of T)
インターフェースを使用して、並べ替えロジックをラップする再利用可能なクラスを作成できます。同じクラスを使用して任意の配列またはリストを簡単に並べ替えることができるIComparer(Of T)
ため、コード内の複数の場所で同じ並べ替えロジックを再利用する必要がある場合に便利です。まず、次のように、インターフェイスを実装するクラスを作成する必要があります。
Public Class FileInfoDescendingByNameComparer
Implements IComparer(Of FileInfo)
Public Function Compare(x As FileInfo, y As FileInfo) As Integer Implements IComparer(Of FileInfo).Compare
Return y.FullName.CompareTo(x.FullName)
End Function
End Class
ご覧のとおり、String
クラス (FullName
プロパティ) に組み込まれている既定の比較ロジックを使用して比較を実行しています。降順で並べ替える理由は、 と比較するのではなく、 と比較y.FullName
しているためです。x.FullName
x.FullName
y.FullName
FileInfo
次に、次のように、そのクラスを使用してオブジェクトの配列を並べ替えることができます。
Array.Sort(Of FileInfo)(files, New FileInfoDescendingByNameComparer())
並べ替えComparison(Of T)
複数の場所で並べ替えロジックを再利用する必要がない場合、またはこの場合のように比較ロジックが非常に単純な場合はComparison(Of T)
、次のように、インラインの匿名関数を指すデリゲートを作成する方が簡単です。 :
Array.Sort(Of FileInfo) _
(
files,
New Comparison(Of FileInfo) _
(
Function(f1 As FileInfo, f2 As FileInfo) f2.FullName.CompareTo(f1.FullName)
)
)