按 X 和 Y 排序列表 属性
Sorting list of by their X and Y property
我有一个“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 定义标签的位置。
我如何对我的(clsLabel 的)列表进行排序,使其按 Y 升序排序,然后按 X 升序排序?
谢谢!
List(Of T)
class 有自己的 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 中,排序是通过定义一个类型的两个对象之间的比较,然后根据算法对成对的列表项重复执行该比较来完成的。如果第一项应该在第二项之前,则比较应该 return 一个小于 1 的 Integer
值,如果第二项应该在第一项之前,则该值大于 1 ,如果它们相等则为零。实现 IComparable
/IComparable(Of T)
inreface(s) 的类型,包括所有 VB 基本类型,内置了这样的比较,这就是 CompareTo
方法使用的以上是.
如果您想了解有关 .NET 排序的更多信息,我创建了一个包含多个部分的博客 post,主题为 here。
我有一个“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 定义标签的位置。
我如何对我的(clsLabel 的)列表进行排序,使其按 Y 升序排序,然后按 X 升序排序?
谢谢!
List(Of T)
class 有自己的 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 中,排序是通过定义一个类型的两个对象之间的比较,然后根据算法对成对的列表项重复执行该比较来完成的。如果第一项应该在第二项之前,则比较应该 return 一个小于 1 的 Integer
值,如果第二项应该在第一项之前,则该值大于 1 ,如果它们相等则为零。实现 IComparable
/IComparable(Of T)
inreface(s) 的类型,包括所有 VB 基本类型,内置了这样的比较,这就是 CompareTo
方法使用的以上是.
如果您想了解有关 .NET 排序的更多信息,我创建了一个包含多个部分的博客 post,主题为 here。