假设我有以下代码:
For intA As Integer = 1 To 5
For intB As Integer = 1 To 50
For intC As Integer = 1 to 100
...
Next intC
Next intB
Next intA
我想将进度保存到db表中,以便以后可以继续。因此,假设intA当前为2,intB当前为14,intC当前为54。
这些被保存在这样的表中:
intA intB intC
========================
2 14 54
很简单。
当我想继续时,如何将每个循环设置为当前保存的值?
我不能简单地将初始循环的开始设置为保存的值,因为那样会改变整个循环的“运行”。
我可能会使用一个标志来表示一个值已被存储并执行以下操作:
booSavedC As Boolean = IsSavedC 'This resides outside all loops, so "single shot"
For intC As Integer = 1 to 100
If booSavedC Then
intC = GetSavedC 'or intC = GetSavedC + 1
booSavedC = False
End If
...
Next intC
但是,这使得每个单独的检查都要检查booSavedC变量,并且还要检查外部循环的变量(booSavedB和booSavedA),等等。
有没有更好,更便宜的方式?
答案 0 :(得分:4)
基于我上面的评论:
您需要使用变量作为循环的起始值 计数器,您可以将它们设置为数据库中的值。内 每个循环,只需将相关变量设置为1,这样循环将 在父循环的下一次迭代中再次从1开始。
这是一个示例:
.carousel{
height: 60vh
}
您不必重置Module Module1
Sub Main()
Console.WriteLine("iMin=1, jMin=1, kMin=1")
RunLoops(1, 1, 1)
Console.WriteLine()
Console.WriteLine("iMin=2, jMin=3, kMin=4")
RunLoops(2, 3, 4)
Console.ReadLine()
End Sub
Sub RunLoops(iMin As Integer, jMin As Integer, kMin As Integer)
For i = iMin To 5
iMin = 1
For j = jMin To 5
jMin = 1
For k = kMin To 5
kMin = 1
Console.WriteLine($"i={i}, j={j}, k={k}")
Next
Next
Next
End Sub
End Module
,因为该循环仅运行一次。它在那里是为了完整性。
编辑:
基于下面@the_lotus的注释以及无需重置最外层循环的起始值的事实,下面是一些修改后的代码:
iMin