我有一个数组说: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()),"$")
谢谢,