3

LINQ をサポートしていない NET 2.0 で動作するには、コードをダウングレードする必要があります。現在、コードは次のように、LINQ を使用FileInfoしてオブジェクトの配列をFullNameプロパティで並べ替えます。

    Dim files As FileInfo() = ' ...
    files = files.OrderByDescending(Function(x) x.FullName).ToArray()

OrderByDescendingLINQ 拡張メソッドを使用せずに、2.0 .NET Framework で同じ種類の並べ替えを実行するにはどうすればよいですか?

4

1 に答える 1

4

LINQ を使用せずに配列を並べ替えるには、Array.Sortshared メソッドを使用できます。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.FullNamex.FullNamey.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)
        )
    )
于 2013-02-28T14:23:14.770 に答える