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

在下面的代码中

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

请求使用 LBound 的要点是什么?当然,这总是0。

0
额外 编辑
意见: 3

5 答案

可能它来自VB6。由于在VB6中使用 Option Base 语句,因此您可以像这样改变数组的下界:

Option Base 1

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

Dim myArray(4 To 42) As String
0
额外

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

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

For Each y In x
    z = DoSomethingWith(y)
Next
0
额外
您不能使用 For Each 来直接编辑数组单元格,因为示例中的 y 是数组单元格的副本,而不是参考。对于数组编辑,对于i = LBound(arr)To UBound(arr)将允许直接使用 arr(i)引用单元格并编辑单元格内容(如< code> arr(i)= Trim(arr(i)))。
额外 作者 Micha? Sacharewicz,

我一直使用For Each ...

0
额外

LBound may not always be 0.

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

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

0
额外

There is a good reason to NOT USE For i = LBound(arr) To UBound(arr)

dim arr(10) allocates eleven members of the array, 0 through 10 (assuming the VB6 default Option Base).

许多VB6程序员假设数组是基于一个数组的,并且从不使用分配的 arr(0)。我们可以通过使用来删除潜在的错误来源。对于i = 1 To UBound(arr)For i = 0 To UBound(arr),因为这样就清楚了正在使用 arr(0)

For each makes a copy of each array element, rather than a pointer.

这有两个问题。

  1. When we try to assign a value to an array element, it doesn't reflect on original. This code assigns a value of 47 to the variable i, but does not affect the elements of arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47
  2. We don't know the index of an array element in a for each, and we are not guaranteed the sequence of elements (although it seems to be in order.)

0
额外