存在这样的情况:有两个列表:list1
为 List(of Integer)
,list2
也是 List(of Integer)
。
我需要删除所有与 list2
中相同的 list1
中的项目。
例如:
list1 = 0, 1, 2, 3, 6, 10
list2 = 3, 6
将list2从list1中移除后:list1 = 0, 1, 2, 10
。
list1.RemoveAll(Function(i) list2.Contains(i))
list1.RemoveAll(AddressOf list2.Contains)
list2
只是一个查找列表,无论如何都不可能包含重复项,最好使用HashSet(Of Int32)
。它具有O(1)
的查找复杂度,与其大小无关,但如果你还需要list2
,则需要更多的内存。您可以轻松创建一个:Dim setOfNums = new HashSet(Of Int32)(list2)
list1.RemoveAll(AddressOf setOfNums.Contains)
list1 = list1.Except(list2).ToList();
list1
中可能包含重复项,例如{0, 1, 2, 3, 6, 1}
,则此方法无法正常工作。结果将是{0, 1, 2}
而不是{0, 1, 2, 1}
。此外,需要创建一个新集合并将其分配给旧集合。 - Tim Schmelter