VBScript循环建议

时间:2015-01-29 20:19:27

标签: loops vbscript

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

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

  • sqlRows是维度为343x1,
  • 的数组
  • visu_state_on是尺寸为8x1,
  • 的数组
  • visu_state_off是尺寸为8x1,
  • 的数组
  • visu_limits_right是尺寸为160x1,
  • 的数组
  • visu_limits_left是尺寸为160x1,
  • 的数组

和变量sizeOfStatesizeOfMeasurement就是我可以计算这四个数组的索引。

1 个答案:

答案 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