我想扩展此前发布的问题
Sort a List of Object in VB.NET
在那个问题中,OP正在询问如何在VB.NET中对对象列表进行排序。
他的例子使用类似
的东西passenger.name
passenger.age
passenger.surname
然后,接受的答案使用
theList.Sort(Function(x, y) x.age.CompareTo(y.age))
到那时,一切都很好。
我对此的扩展是询问如果例如我按年龄排序会发生什么,例如,但是,让我们说2名乘客的年龄相同,那么,在这种情况下,我我想使用第二个参数(让我们说passenger.name
)进行排序。
是否可以使用相同的theList.Sort
表达式完成?
答案 0 :(得分:2)
您可以为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()
答案 1 :(得分:1)
如果我记得正确,应该通过以下方式完成:
theList = theList.OrderBy(Function(x, y) x.age.CompareTo(y.age)).ThenBy(Function(x) x.name) ' .toList()