要在不使用 LINQ 的情况下对数组进行排序,可以使用Array.Sort
共享方法。如果有许多重载允许您自定义数组的排序方式。在这种情况下,我建议的两个重载要么是需要一个IComparer(Of T)
对象,或者需要一个Comparison(Of T)
代表。
排序使用IComparer(Of T)
The 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
to x.FullName
而不是比较x.FullName
to y.FullName
.
然后,您可以对数组进行排序FileInfo
使用该类的对象,如下所示:
Array.Sort(Of FileInfo)(files, New FileInfoDescendingByNameComparer())
排序使用Comparison(Of T)
如果不需要在多个地方重复使用排序逻辑,或者像本例一样,比较逻辑非常简单,那么创建一个Comparison(Of T)
delegate 指向内联匿名函数,如下所示:
Array.Sort(Of FileInfo) _
(
files,
New Comparison(Of FileInfo) _
(
Function(f1 As FileInfo, f2 As FileInfo) f2.FullName.CompareTo(f1.FullName)
)
)