通过两个元素对VB.NET中的对象列表进行排序

时间:2015-06-12 11:13:58

标签: vb.net list sorting object

我想扩展此前发布的问题

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表达式完成?

2 个答案:

答案 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()