私は配列を持っています: 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()),"$")
ありがとう、