在VB.NET中对对象列表进行排序

我有一个具有不同属性的乘客(对象)列表。

passenger.name
passenger.age
passenger.surname

我想按年龄标准对列表进行排序,我该怎么做?

我知道整数/字符串List.Sort()的列表有效,但是如果是对象列表,我不知道它是否可以按对象属性的值排序!

谢谢。

bombai asked 2020-07-25T23:16:08Z
3个解决方案
101 votes

要按对象中的属性排序,必须指定一个比较器或方法来获取该属性。

使用OrderBy方法:

theList.Sort(Function(x, y) x.age.CompareTo(y.age))

使用OrderBy扩展方法:

theList = theList.OrderBy(Function(x) x.age).ToList()
Guffa answered 2020-07-25T23:17:36Z
4 votes

如果需要自定义字符串排序,则可以创建一个函数,该函数根据指定的顺序返回数字。

例如,我有一些想要根据正面或扣环进行分类的图片。 所以我做了以下事情:

Private Function sortpictures(s As String) As Integer
    If Regex.IsMatch(s, "FRONT") Then
        Return 0
    ElseIf Regex.IsMatch(s, "SIDE") Then
        Return 1
    ElseIf Regex.IsMatch(s, "CLASP") Then
        Return 2
    Else
        Return 3
    End If
End Function

然后我这样调用sort函数:

list.Sort(Function(elA As String, elB As String)
                  Return sortpictures(elA).CompareTo(sortpictures(elB))
              End Function)
user890332 answered 2020-07-25T23:18:05Z
0 votes

您必须实现IComparer接口。

在此示例中,我具有自定义对象JSONReturn,我实现了这样的类:

Friend Class JSONReturnComparer
    Implements IComparer(of JSONReturn)

    Public Function Compare(x As JSONReturn, y As JSONReturn) As Integer Implements    IComparer(Of JSONReturn).Compare
        Return String.Compare(x.Name, y.Name)
    End Function

End Class

我这样调用我的排序列表方法: alResult.Sort(新的JSONReturnComparer())

也许可以帮到你

Pierre-Olivier Pignon answered 2020-07-25T23:18:38Z
translate from https://stackoverflow.com:/questions/11735902/sort-a-list-of-object-in-vb-net