要在没有 LINQ 的情况下对数组进行排序,可以使用Array.Sort
shared 方法。If 有许多重载允许您自定义数组的排序方式。在这种情况下,我推荐的两个重载将是一个接受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)
)
)