Сортировка списка VB.net по значению класса - PullRequest
23 голосов
/ 25 июня 2011

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

Ответы [ 3 ]

42 голосов
/ 25 июня 2011

Если у вас есть 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, если вы хотите заказать более чем одну вещь. Это также делает синтаксис немного чище.

8 голосов
/ 25 июня 2011

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

nList.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex))
6 голосов
/ 25 июня 2011

Если не 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...