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

Ron*_*nie 37 arrays vbscript asp-classic

在下面的代码中

For i = LBound(arr) To UBound(arr)
Run Code Online (Sandbox Code Playgroud)

要求使用有LBound什么意义?当然,这总是0.

Chr*_*mer 51

为什么不用For Each?你并不需要通过这种方式去关心什么LBoundUBound是.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Run Code Online (Sandbox Code Playgroud)

  • 您不能使用"For Each"直接编辑数组单元格,因为示例中的"y"是数组单元格的副本,而不是它的引用.对于数组编辑,`For i = LBound(arr)To UBound(arr)`将允许用`arr(i)`直接引用单元格并编辑单元格内容(如`arr(i)= Trim(arr(i) ))`). (8认同)

xpd*_*pda 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. 当我们尝试为数组元素赋值时,它不会反映在原始元素上.此代码为变量赋值47 i,但不影响元素arr.

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

  2. 我们不知道a中数组元素的索引for each,我们不保证元素序列(尽管它看起来是有序的.)