我有一个数组说:VMHArray
=(12,22,34,4)现在有另一个Arraylist
对象说ArrayListTaskDetails
保存数据为(12,55,44,4,12,22,21,107,43,22,34 )现在我写下如下代码,用于从列表ArrayListTaskDetails
中删除不在VMHArray
中的项目。我们可以在VBScript中重置For循环计数器吗?
代码
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
将无法正常工作
CODE(按@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()),"$")
感谢,
你尝试'退出for'写'for'或尝试[此退出while循环(http://stackoverflow.com/questions/1271949/exit-a-while-loop- in-vbscripts) – bonCodigo
@bonCodigo如果我使用'exit for',那么剩下的元素将如何被检查? – CodeLover
试试我给出的代码。坦率地说,对不起,我没有阅读完整的*完整的小说文本*,只是看看你的标题和代码。 – bonCodigo