我正在尝试使用函数findAll加上lambda函数获取listOf结构的特定元素,然后对该结果进行排序并保持对列表中保存的那些元素的排序。 listOf的结构有一个id和一个年龄,所以我想要的是获取id = 0的所有项目,然后对该结果的年龄进行排序,并将该修改保留在变量中。
这是我尝试过的,但它不起作用
list.FindAll(Function(p1) p1.id = 0).Sort(Function(p1, p2) p1.age > p2.age)
答案 0 :(得分:4)
您的代码行不起作用,因为FindAll会返回包含找到的项目的新列表,并且您不会将该新列表分配给列表变量。此外,您不能将调用链接到Sort,因为此函数更改基础列表并且不返回任何内容。要使用FindAll和Sort,您需要两个语句:
list = list.FindAll(Function(p1) p1.id = 0)
list.Sort(Function(p1, p2) p1.age.CompareTo(p2.age))
使用Linq更容易实现这一点,因为您始终可以使用Linq链接表达式,并且排序更容易。但是您需要再次将结果分配给列表:
list = list.Where(Function(p1) p1.id = 0) _
.OrderBy(Function(p1) p1.Age).ToList()