3

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

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

例如:

list1 = 0, 1, 2, 3, 6, 10
list2 = 3, 6

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

4

2 回答 2

4
list1.RemoveAll(Function(i) list2.Contains(i))

或只是与代表

list1.RemoveAll(AddressOf list2.Contains)

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

您可以轻松创建一个:

Dim setOfNums = new HashSet(Of Int32)(list2)
list1.RemoveAll(AddressOf setOfNums.Contains)
于 2013-09-23T13:09:45.093 回答
0
list1 = list1.Except(list2).ToList();
于 2013-09-23T13:25:02.787 回答