我有一个“clsLabel”列表:
Private _ListOfAllLabels As New List(Of clsLabel)
Public Class clsLabel
Public Name As String
Public X As Double
Public Y As Double
End Class
X 和 Y 定义标签的位置。
我如何对我的 List(of clsLabel) 进行排序,使其按 Y 排序,然后按 X 升序排序?
谢谢!
该类List(Of T)
有自己的Sort
方法,可以就地排序。它允许您使用IComparer(Of T)
,如果您想要进行大量排序,尤其是如果您希望它是可配置的,您应该使用它。不过,对于一次性排序,只需使用接受Comparison(Of T)
委托的重载:
_ListOfAllLabels.Sort(Function(l1, l2)
Dim result = l1.Y.CompareTo(l2.Y)
If result = 0 Then
result = l1.X.CompareTo(l2.X)
End If
Return result
End Function)
在 .NET 中,排序是通过定义一个类型的两个对象之间的比较,然后基于算法对列表项对重复执行该比较来完成的。如果第一项应在第二项之前,则比较应返回Integer
小于 1 的值,如果第二项应在第一项之前,则比较应返回大于 1 的值,如果它们相等则返回零。实现IComparable
/ IComparable(Of T)
inreface(s) 的类型,包括所有 VB 基本类型,内置了这样的比较,这就是CompareTo
上面使用的方法。
如果您想了解更多关于 .NET 排序的信息,我在这里创建了一篇关于该主题的多部分博客文章。