我有一個數組說: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