2015-06-12 2 views
0

Я хотел бы продолжение вопроса размещали здесьсортировки списка объектов в VB.NET двумя элементами

Sort a List of Object in VB.NET

В этом вопросе, ОП просит, как отсортировать список объектов в VB.NET.

Его пример использует что-то вроде

passenger.name 
passenger.age 
passenger.surname 

И затем, принятый ответ использует

theList.Sort(Function(x, y) x.age.CompareTo(y.age)) 

С этой точки, все в порядке.

Мое расширение для этого - спросить, что произойдет, если, например, я сортируюсь по возрасту, например, например, допустим, что 2 пассажира имеют одинаковый возраст, тогда в этом случае я хотел бы используйте второй параметр (скажем, passenger.name), сортировать.

Может ли это быть сделано с использованием того же выражения theList.Sort?

ответ

1

Вы могли бы реализовать пользовательские IComparer(Of Passenger) для List.Sort:

Class PassengerComparer 
    Implements IComparer(Of Passenger) 
    Public Function Compare(p1 As Passenger, p2 As Passenger) As Integer Implements System.Collections.Generic.IComparer(Of Passenger).Compare 
     If p1.Age = p2.Age AndAlso p1.Name = p2.Name Then 
      Return 0 
     ElseIf p1.Age <> p2.Age Then 
      Return p1.Age.CompareTo(p2.Age) 
     ElseIf p1.Name <> p2.Name Then 
      Return p1.Name.CompareTo(p2.Name) 
     End If 
    End Function 
End Class 

Теперь вы можете использовать это:

list.Sort(New PassengerComparer()) 

Другой способ заключается в использовании LINQ:

Dim ordered = From obj In theList 
       OrderBy obj.Age Ascending, obj.Name Ascending 
theList = ordered.ToList() 
+0

Спасибо, это вариант «не LINQ»? – codeKiller

+0

@newPyUser: Я отредактировал свой ответ. –

+0

Спасибо Тиму, конечно, это дело не для моего пассажира, а для меня, конечно, я могу работать с этим, огромное спасибо. – codeKiller

1

Если я помню вкратце это должно быть сделано:

theList = theList.OrderBy(Function(x, y) x.age.CompareTo(y.age)).ThenBy(Function(x) x.name) ' .toList() 
+0

Спасибо Sonorpearl, этот ответ тоже очень хорош – codeKiller

Смежные вопросы