vb.net在下一个循环期间默默地失败

时间:2012-03-17 13:42:30

标签: vb.net

我有这个功能来删除数组中的重复项:

Function remove_duplicates(array)
    Dim dup_count As Integer = 0

    For Each element As String In array

        For Each inner_element As String In array

            If (element = inner_element) Then
                If (dup_count = 0) Then
                    dup_count = 1
                Else

                    array.Remove(inner_element)
                End If
            End If

        Next 'dies here

        dup_count = 0
    Next

    Return array
End Function

我正在向其中提供以下测试arrayList:

(0)test1 (1)test2 (2)test3 (3)test2

我希望返回:

(0)test1 (1)test3 (2)test2

目前发生的事情是内循环到达数组。在主foreach的第二个循环中第一次在第二个循环中移动(inner_element)行,到达内部下一行然后停止执行。没有警告/通知,调试步骤虽然结束,好像没有进一步的逻辑。

有人可以建议解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您无法修改当前正在迭代的列表。

此外,还有更好的方法可以使用RemoveAll方法从列表中删除:

 array.RemoveAll(Function (x) array.Count(Function (y) x = y) > 1)

这需要Linq方法Count(因此Import System.Linq)。

修改

不是手动执行此操作,而是采用预先存在的方法,当然更好,更具可读性和更高效:

Dim result = array.Distinct()

Distinct在内部构造HashSet,这使得此方法在渐近时间O( n )而不是O( n ^ 2)中运行(这是上述方法的运行时)。