我有一个数组说:VMHArray=(12,22,34,4)现在有另一个Arraylist对象说ArrayListTaskDetails将数据保存为(12,55,44,4,12,22,21,107,43,22,34)现在下面的代码我写了从列表中删除ArrayListTaskDetails不存在于VMHArray.
代码
Dim Flag : Flag = true
Dim Counter
For IndexSearch = 0 To ArrayListTaskDetails.Count - 1 step 4
Counter = 0
Do while Flag
If VMHArray(Counter) <> ArrayListTaskDetails (IndexSearch) Then
ArrayListTaskDetails.RemoveRange IndexSearch, 4
Flag = False
End If
Counter = Counter + 1
Loop
Next
现在假设在 处找到匹配项IndexSearch = 0,因此它将删除位置处的元素0,1,2,3- 非常好。但是由于移除和使ArrayList对象按功能连续,其他元素将4向左移动。现在问题For Loop已经增加了 4,所以它将从下一次迭代开始location 4。因此,现在0 location数组列表中的新元素永远没有机会测试与VMHArray数组元素的相等性。我们是否可以在不丢失预期操作的情况下处理这种情况,或者无论如何我们可以将For Loop计数器设置为其直接位置,在该位置找到最近的匹配并删除了 4 个元素。?
如果有任何问题了解问题,请告诉我!
编辑 Go to将不起作用
代码(根据@Ankit 的建议)
Option Explicit
Dim Flag : Flag = true
Dim Counter
Dim VMHArray : VMHArray = Array(12,22,34,4)
Dim ArrayListTaskDetails : Set ArrayListTaskDetails = CreateObject("System.Collections.ArrayList")
ArrayListTaskDetails.Add(45)
ArrayListTaskDetails.Add(4)
ArrayListTaskDetails.Add(22)
ArrayListTaskDetails.Add(4)
ArrayListTaskDetails.Add(45)
ArrayListTaskDetails.Add(20)
ArrayListTaskDetails.Add(12)
ArrayListTaskDetails.Add(35)
ArrayListTaskDetails.Add(34)
Restart:
For IndexSearch = 0 To ArrayListTaskDetails.Count - 1 step 4
Counter = 0
Do while Flag
If VMHArray(Counter) <> ArrayListTaskDetails (IndexSearch) Then
ArrayListTaskDetails.RemoveRange IndexSearch, 4
Goto Restart
Flag = False
End If
Counter = Counter + 1
Loop
Next
MsgBox(Join(ArrayListTaskDetails.ToArray()),"$")

谢谢,