3

関数findAllとラムダ関数を使用してlistOf構造の特定の要素を取得し、その結果を並べ替えて、それらの要素の並べ替えをリストに保存しようとしています。listOf の構造には id と age があるため、id=0 のすべてのアイテムを取得し、その結果の age を並べ替えて、その変更を変数に保持する必要があります。

これは私が試したものですが、うまくいきません

list.FindAll(Function(p1) p1.id = 0).Sort(Function(p1, p2) p1.age > p2.age)
4

1 に答える 1

4

FindAll は見つかったアイテムを含む新しいリストを返し、その新しいリストを list 変数に割り当てていないため、コード行は機能しません。また、この関数は基になるリストを変更し、何も返さないため、Sort への呼び出しをチェーンすることはできません。FindAll と Sort を一緒に使用するには、次の 2 つのステートメントが必要です。

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()
于 2012-05-09T11:35:23.160 に答える