VBScript 循环建议

VBScript loop advice

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 的数据填充其他四个数组。

这个解决方案有效,但我想知道是否有更优雅的方法来实现同样的效果。

和变量 sizeOfStatesizeOfMeasurement 就在那里,我可以计算这四个数组的索引。

一方面,您可以从每个条件中删除第一个子句,因为它们始终为真

  • 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