在Classic Asp VBScript中迭代数组的最佳方法是什么?

时间:2008-08-05 14:07:59

标签: arrays asp-classic vbscript

在下面的代码中

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

使用LBound询问有什么意义?当然,这总是0。

6 个答案:

答案 0 :(得分:50)

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

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

For Each y In x
    z = DoSomethingWith(y)
Next

答案 1 :(得分:17)

不使用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. 当我们尝试为数组元素赋值时,它不会反映原始数据。此代码为变量i指定了值47,但不会影响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中数组元素的索引,我们无法保证元素序列(尽管它看起来是有序的。)

答案 2 :(得分:3)

LBound可能并不总是为0.

虽然无法在VBScript中创建除0下限之外的任何数组,但仍可以从COM组件中检索可能指定了不同LBound的变体数组。

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

答案 3 :(得分:2)

可能它来自VB6。因为在VB6中使用Option Base语句,您可以改变数组的下限:

Option Base 1

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

Dim myArray(4 To 42) As String

答案 4 :(得分:1)

我一直都在使用For Each ......

答案 5 :(得分:0)

这是我的方法:

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

希望有帮助。