-1

我有一个“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 升序排序?

谢谢!

4

1 回答 1

1

该类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 排序的信息,我在这里创建了一篇关于该主题的多部分博客文章。

于 2021-03-12T01:08:22.037 回答