sqlRows = rst.GetRows()
i = 0
For Each element In sqlRows
If i > 0 And i < sizeOfState + 1 Then
SmartTags("visu_state_on")(i - 1) = element
ElseIf i > sizeOfState And i < 2 * sizeOfState + 1 Then
SmartTags("visu_state_off")(i - sizeOfState - 1) = element
ElseIf i > (2 * sizeOfState ) And i < 2 * sizeOfState + sizeOfMeasurement + 1 Then
SmartTags("visu_limits_right")(i - (2 * sizeOfState - 1)) = element
ElseIf i > 2 * sizeOfState + sizeOfMeasurement And i < 2 * (sizeOfStanja + sizeOfMeasurement ) + 1 Then
SmartTags("visu_limits_left")(i - (2 * sizeOfState + sizeOfMeasurement )) = element
End If
i = i + 1
Next
使用上面的代码我循环遍历数组sqlRows
和变量i
我正在使用来自sqlRows
的数据填充其他四个数组。
这个解决方案有效,但我想知道是否有更优雅的方法来实现同样的目标。
和变量sizeOfState
和sizeOfMeasurement
就是我可以计算这四个数组的索引。
答案 0 :(得分:2)
首先,您可以从每个条件中删除第一个子句,因为它们将永远是真的
i
以值0开头并且总是递增,因此该值永远不会小于零。n + 1
(之前ElseIf
中的条件),则保证其值大于n
。此外,VBScript确实有<=
比较运算符,因此最好比较i <= n
而不是i < n + 1
。
我还建议计算在循环外一次不会在循环内改变的值。每个循环周期重新计算它们是浪费资源。
添加Else
分支以处理大于2 * (sizeOfStanja + sizeOfMeasurement)
的值也可能是一个好主意。
sqlRows = rst.GetRows()
i = 0
ref1 = 2 * sizeOfState
ref2 = ref1 + sizeOfMeasurement
ref3 = 2 * (sizeOfStanja + sizeOfMeasurement)
For Each element In sqlRows
If i <= sizeOfState Then
SmartTags("visu_state_on")(i - 1) = element
ElseIf i <= ref1 Then
SmartTags("visu_state_off")(i - sizeOfState - 1) = element
ElseIf i <= ref2 Then
SmartTags("visu_limits_right")(i - ref1 + 1) = element
ElseIf i <= ref3 Then
SmartTags("visu_limits_left")(i - ref2) = element
Else
'handle i > ref3 here
End If
i = i + 1
Next