删除For循环中的部分数组

时间:2014-12-31 15:54:15

标签: vb.net for-loop arraylist

我正在比较两个数组,如果第一个数组在第二个数组中包含一个单词,那么它应该从第一个数组中删除它。

For Each word In array1
    If array2.Contains(word) Then
        array1.Remove(word)
    End If
Next

然而,当我调试时,它给出了以下错误:

Collection was modified; enumeration operation may not execute.

因为它在试图迭代它时更新了数组

2 个答案:

答案 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。两者都很好。