【问题标题】:sort list of objects in VB.NET by two elements按两个元素对 VB.NET 中的对象列表进行排序
【发布时间】:2015-08-28 09:09:00
【问题描述】:

我想对之前在此处发布的问题进行扩展

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

【问题讨论】:

    标签: vb.net list sorting object


    【解决方案1】:

    您可以为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()
    

    【讨论】:

    • 谢谢,是否有任何“非 LINQ”选项?
    • 谢谢蒂姆,当然这个乘客和年龄问题不是我的情况,但我当然可以处理,非常感谢。
    【解决方案2】:

    如果我没记错的话应该是:

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

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多