Freesnöw
Freesnöw

Reputation: 32213

Sorting a VB.net List by a class value

I have a list (i.e. Dim nList as new List(of className)). Each class has a property named zIndex (i.e. className.zIndex). Is it possible to sort the elements of the list by the zIndex variable in all of the elements of the list?

Upvotes: 25

Views: 55129

Answers (3)

LarsTech
LarsTech

Reputation: 81675

If not LINQ, then you can implement the IComparable(Of ClassName) to your class:

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

and then from your code:

nList.Sort()

Upvotes: 6

Guffa
Guffa

Reputation: 700800

You can use a custom comparison to sort the list:

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

Upvotes: 8

vcsjones
vcsjones

Reputation: 141688

Assuming you have LINQ at your disposal:

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

Or if LINQ isn't your thing:

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

LINQ offers more flexibility; such as being able to use ThenBy if you want to order by more than one thing. It also makes for a slightly cleaner syntax.

Upvotes: 45

Related Questions