在经典的Asp VBScript中,迭代数组的最佳方式是什么?

Translate

在下面的代码中

For i = LBound(arr) To UBound(arr)

问使用有什么意义LBound?肯定总是0。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

为什么不使用For Each?这样,您就不必关心LBoundUBound是。

Dim x, y, z
x = Array(1, 2, 3)

For Each y In x
    z = DoSomethingWith(y)
Next
来源
Translate

有充分的理由不使用For i = LBound(arr) To UBound(arr)

dim arr(10)分配数组的11个成员(0到10)(假设使用VB6默认Option Base)。

许多VB6程序员认为数组是基于一个的,并且从不使用分配的数组。arr(0)。我们可以使用删除潜在的错误源For i = 1 To UBound(arr)要么For i = 0 To UBound(arr),因为很明显arr(0)正在被使用。

For each复制每个数组元素,而不是指针。

这有两个问题。

  1. 当我们尝试为数组元素分配值时,它不会影响原始值。这段代码为变量赋值47i,但不影响arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. 我们不知道数组元素在for each,我们不能保证元素的顺序(尽管看起来是有序的。)

来源
Translate

LBound可能不总是为0。

尽管不可能在VBScript中创建除0下界以外的任何内容的数组,但仍然有可能从COM组件中检索可能指定了不同变量的变量数组。LBound.

那就是说我从来没有遇到过做过这样的事情的人。

来源
Translate

可能来自VB6。因为随着期权库VB6中的语句,您可以像这样更改数组的下限:

Option Base 1

同样在VB6中,您可以像这样更改特定数组的下限:

Dim myArray(4 To 42) As String
来源
Translate

我一直都用For Each ...

来源
Translate

这是我的方法:

dim arrFormaA(15)
arrFormaA( 0 ) = "formaA_01.txt"
arrFormaA( 1 ) = "formaA_02.txt"
arrFormaA( 2 ) = "formaA_03.txt"
arrFormaA( 3 ) = "formaA_04.txt"
arrFormaA( 4 ) = "formaA_05.txt"
arrFormaA( 5 ) = "formaA_06.txt"
arrFormaA( 6 ) = "formaA_07.txt"
arrFormaA( 7 ) = "formaA_08.txt"
arrFormaA( 8 ) = "formaA_09.txt"
arrFormaA( 9 ) = "formaA_10.txt"
arrFormaA( 10 ) = "formaA_11.txt"
arrFormaA( 11 ) = "formaA_12.txt"
arrFormaA( 12 ) = "formaA_13.txt"
arrFormaA( 13 ) = "formaA_14.txt"
arrFormaA( 14 ) = "formaA_15.txt"

Wscript.echo(UBound(arrFormaA))
''displays "15"

For i = 0 To UBound(arrFormaA)-1
    Wscript.echo(arrFormaA(i))
Next

希望能帮助到你。

来源