2011-06-25 15 views

Odpowiedz

41

Zakładając, że LINQ do Państwa dyspozycji:

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 

Lub jeśli LINQ nie jest twoja sprawa:

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

LINQ oferuje większą elastyczność; takie jak możliwość użycia ThenBy, jeśli chcesz zamówić więcej niż jedną rzecz. Daje także nieco czystszą składnię.

+0

Nie mogłem użyć przykładu LINQ, w jaki sposób mogę to włączyć? Mam drugi do pracy, dziękuję :) – FreeSnow

+0

@DalexL To zależy od wersji ramowej, na którą celujesz. Potrzebujesz 3,5 lub więcej. Kompilator VB.NET powinien zaimportować dla ciebie przestrzeń nazw System.Linq. (Zobacz na karcie Referencje właściwości projektu). – vcsjones

+0

OK, porównuję daty. Kiedy używam mojej linii 'a.Sort (funkcja (x, y) x.DelegationDate.CompareTo (y.DelegationDate))', nie sortuje wcale. Pozostawia to w pierwotnej kolejności. –

8

Można użyć porównania niestandardowy, aby posortować listę:

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

Jak włączyć LINQ? – FreeSnow

+0

@DalexL: Importujesz przestrzeń nazw 'System.Linq'. – Guffa

+0

@DalexL: Zauważ, że Linq nie potrzebuje rozwiązania, które zasugerowałem. – Guffa

6

Jeśli nie LINQ, można zaimplementować IComparable (z className) do swojej klasy:

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 

a następnie z Twój kod:

nList.Sort() 
+0

Możesz skrócić całą metodę 'CompareTo' do' Return _ZIndex.CompareTo (other.ZIndex) ' – vcsjones

Powiązane problemy