我正在比较两个数组,如果第一个数组在第二个数组中包含一个单词,那么它应该从第一个数组中删除它。
For Each word In array1
If array2.Contains(word) Then
array1.Remove(word)
End If
Next
然而,当我调试时,它给出了以下错误:
Collection was modified; enumeration operation may not execute.
因为它在试图迭代它时更新了数组
答案 0 :(得分:1)
使用Linq它看起来像这样。它通过array2过滤array1并返回新数组,该数组仅包含array1中未在array2中找到的项。
Public Function FilterArrayByArray() As String()
Dim array1() = New String() {"word1", "word2", "word3", "word4", "word5"}
Dim array2() = New String() {"word2", "word5"}
Return array1.Where(Function(array1Item) Not array2.Contains(array1Item)).ToArray()
End Function
答案 1 :(得分:0)
我之前在C#中看到过这个问题,假设它是同一类型的。在您的示例中,您使用的是for each
循环。切换到for
循环(具有索引)。
当找到包含array2.Contains(word)
的单词时,从索引中减去一个。
E.G(C#),
for (int i = 0; i < array1.Count; i++) //iterate through the items in array1
{
if (array2.Contains(word) //if array2 contains word, ...
{
array1.Remove(word); //... then remove it, and subtract from i.
i--;
}
}
或者向后遍历array1并执行上面的--i
。两者都很好。