我有这个功能来删除数组中的重复项:
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)行,到达内部下一行然后停止执行。没有警告/通知,调试步骤虽然结束,好像没有进一步的逻辑。
有人可以建议解决这个问题吗?
答案 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)中运行(这是上述方法的运行时)。