按类值对VB.net列表进行排序

Fre*_*nöw 23 vb.net sorting list

我有一个清单(即Dim nList as new List(of className)).每个类都有一个名为zIndex(ie className.zIndex)的属性.是否可以通过列表中所有元素中的zIndex变量对列表元素进行排序?

vcs*_*nes 42

假设你有LINQ可供你使用:

Sub Main()
    Dim list = New List(Of Person)()
    'Pretend the list has stuff in it
    Dim sorted = list.OrderBy(Function(x) x.zIndex)
End Sub

Public Class Person
    Public Property zIndex As Integer
End Class
Run Code Online (Sandbox Code Playgroud)

或者如果LINQ不是你的事情:

Dim list = New List(Of Person)()
list.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex))
'Will sort list in place
Run Code Online (Sandbox Code Playgroud)

LINQ提供更大的灵活性; ThenBy如果您想通过多个订单进行订购,则可以使用.它还使语法略微清晰.


Guf*_*ffa 8

您可以使用自定义比较对列表进行排序:

nList.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex))
Run Code Online (Sandbox Code Playgroud)


Lar*_*ech 6

如果不是LINQ,那么你可以在你的类中实现IComparable(Of ClassName):

Public Class ClassName
  Implements IComparable(Of ClassName)

  'Your Class Stuff...

  Public Function CompareTo(ByVal other As ClassName) As Integer Implements System.IComparable(Of ClassName).CompareTo
    If _ZIndex = other.ZIndex Then
      Return 0
    Else
      If _ZIndex < other.ZIndex Then
        Return -1
      Else
        Return 1
      End If
    End If
  End Function
End Sub
Run Code Online (Sandbox Code Playgroud)

然后从你的代码:

nList.Sort()
Run Code Online (Sandbox Code Playgroud)