Подтвердить что ты не робот

Сортировка списка VB.net по значению класса

У меня есть список (т.е. Dim nList as new List(of className)). Каждый класс имеет свойство с именем zIndex (т.е. className.zIndex). Можно ли отсортировать элементы списка с помощью переменной zIndex во всех элементах списка?

4b9b3361

Ответ 1

Предполагая, что у вас есть 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

Или, если LINQ не ваша вещь:

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

LINQ предлагает большую гибкость; например, возможность использовать ThenBy, если вы хотите заказать более чем одну вещь. Это также делает несколько более чистый синтаксис.

Ответ 2

Вы можете использовать произвольное сравнение для сортировки списка:

nList.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex))

Ответ 3

Если не 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

а затем из вашего кода:

nList.Sort()