如何在vb.net中使用lambda删除List的指定项

fra*_*kie 3 vb.net lambda

有这样的情况。有两个列表:list1asList(of Integer)list2as List(of Integer)

我需要删除 list1 中与 list2 的项目相同的所有项目。

例如:

list1 = 0, 1, 2, 3, 6, 10
list2 = 3, 6
Run Code Online (Sandbox Code Playgroud)

从 list1 中删除 list2 后list1 = 0, 1, 2, 10

Tim*_*ter 5

list1.RemoveAll(Function(i) list2.Contains(i))
Run Code Online (Sandbox Code Playgroud)

或者只是与代表一起

list1.RemoveAll(AddressOf list2.Contains)
Run Code Online (Sandbox Code Playgroud)

正如 Meta-Knight 所指出的, iflist2只是一个查找列表,不能包含重复项,无论如何,您最好使用 aHashSet(Of Int32)代替。它的O(1)查找复杂性与其大小无关,但缺点是如果您还需要,则需要更多内存list2

您可以轻松创建一个:

Dim setOfNums = new HashSet(Of Int32)(list2)
list1.RemoveAll(AddressOf setOfNums.Contains)
Run Code Online (Sandbox Code Playgroud)