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

bom*_*bai 43 vb.net sorting list object

我有一个乘客(对象)列表,它有不同的属性..

passenger.name
passenger.age
passenger.surname
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Guf*_*ffa 101

要按对象中的属性进行排序,必须指定比较器或获取该属性的方法.

使用List.Sort方法:

theList.Sort(Function(x, y) x.age.CompareTo(y.age))
Run Code Online (Sandbox Code Playgroud)

使用OrderBy扩展方法:

theList = theList.OrderBy(Function(x) x.age).ToList()
Run Code Online (Sandbox Code Playgroud)

  • @bombai:只需在比较中切换变量:`y.age.CompareTo(x.age)`.使用第二种方法,您可以使用`OrderByDescending`. (6认同)
  • 请务必了解,第一个选项对现有列表进行排序,而第二个选项则创建新列表。因此,如果您可能有对现有列表的其他引用,则第二个选项不是一个好的选择。 (2认同)

use*_*332 5

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

例如,我想根据正面或扣环对图片进行排序。所以我做了以下事情:

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
Run Code Online (Sandbox Code Playgroud)

然后我像这样调用排序函数:

list.Sort(Function(elA As String, elB As String)
                  Return sortpictures(elA).CompareTo(sortpictures(elB))
              End Function)
Run Code Online (Sandbox Code Playgroud)