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

时间:2020-03-05 18:37:45  来源:igfitidea点击:

在下面的代码中

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

问使用LBound有什么意义?当然,它始终为0。

解决方案

回答

可能来自VB6. 因为使用VB6中的Option Base语句,我们可以像这样更改数组的下限:

Option Base 1

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

Dim myArray(4 To 42) As String

回答

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

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

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

回答

我一直都用For Each ...

回答

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

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

许多VB6程序员认为数组是基于一个的,并且从不使用分配的arr(0)。我们可以使用For i = 1到UBound(arr)或者For i = 0到UBound(arr)消除潜在的错误源,因为这样就可以清楚地使用arr(0)了。

"对于每个"会复制每个数组元素,而不是指针。

这有两个问题。

  • 当我们尝试为数组元素分配值时,它不会影响原始值。该代码为变量" 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
  • 我们不知道"每个"中数组元素的索引,也不能保证元素的顺序(尽管看起来是有序的)。

回答

LBound可能并不总是为0。

尽管不可能在VBScript中创建除0下限以外的任何其他内容的数组,但仍可能从COM组件中检索到一组变量,这些变量可能已指定了不同的" LBound"。

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