按 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