我正在使用VB.NET和.NET框架3.0
我目前正在对一个列表进行排序:
lstPeople.Sort(Function(p1, p2) p1.LName.CompareTo(p2.LName))
然而,现在我想在按照LName排序后也按照FName进行排序。所以它首先按照姓氏排序,然后按照名字排序。
这种排序方式是否可行?
是的,这是可能的。
我认为最好的方法是,如果你可以改变“People”类,创建自己的CompareTo()
函数。
Private Function CompareTo(p2 As People) As Integer
Dim i As Int32 = Me.LName.CompareTo(p2.LName)
If i = 0 Then
Return Me.FName.CompareTo(p2.FName)
End If
Return i
End Function
然后使用它:
lstPeople.Sort(Function(p1, p2) p1.CompareTo(p2))
编辑:转换为VB.NET。
CompareTo
的结果,如果它们仍然不相等,则返回名字之间的比较。Public Class PeopleComparer
Implements IComparer(Of People)
Public Function Compare(x As People, y As People) As Integer Implements IComparer(Of People).Compare
Dim lnameComparison As Integer = x.LName.CompareTo(y.LName)
Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison)
End Function
End Class
和
lstPeople.Sort(New PeopleComparer())
尝试
Public Class PeopleComparer
Implements IComparer(Of People)
Public Function Compare(x As People, y As People) As Integer
Dim lnameComparison As Integer = x.LName.CompareTo(y.LName)
Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison)
End Function
End Class
和
lstPeople.Sort(New PeopleComparer())
Public Function Compare(ByVal x As SB, ByVal y As SB) As Integer
Dim iComparison As Integer = x.Item.CompareTo(y.Item)
Return If(iComparison = 0, x.We.CompareTo(y.We), iComparison)
End Function
End Class - waqasahmed必须添加Implements System.Collections.Generic.IComparer(Of People).Compare
函数中。通过在IComparer(Of People)
后键入回车键生成桩。
Public Class PeopleComparer
Implements IComparer(Of People)
Public Function Compare(x As People, y As People) As Integer Implements System.Collections.Generic.IComparer(Of People).Compare
Dim lnameComparison As Integer = x.LName.CompareTo(y.LName)
Return If(lnameComparison = 0, x.FName.CompareTo(y.FName), lnameComparison)
End Function
End Class
IComparer
。 - Magnus