簡體   English   中英

通過兩個元素對VB.NET中的對象列表進行排序

[英]sort list of objects in VB.NET by two elements

我想擴展以前在這里發布的問題

在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表達式完成嗎?

您可以為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM