[英]sort list of objects in VB.NET by two elements
我想擴展以前在這里發布的問題
在該問題中,OP正在詢問如何對VB.NET中的對象列表進行排序。
他的例子使用類似
passenger.name
passenger.age
passenger.surname
然后,接受的答案使用
theList.Sort(Function(x, y) x.age.CompareTo(y.age))
至此,一切正常。
我對此的擴展是詢問例如如果我按照示例對年齡進行排序,但是,假設2位乘客的年齡相同,那么在這種情況下,我想使用第二個參數(例如, passenger.name
)進行排序。
可以使用相同的theList.Sort
表達式完成嗎?
您可以為List.Sort
實現自定義IComparer(Of Passenger)
:
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()
如果我沒記錯的話,應該通過以下方法完成:
theList = theList.OrderBy(Function(x, y) x.age.CompareTo(y.age)).ThenBy(Function(x) x.name) ' .toList()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.