在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
?这样,我们就不必关心LBound
和UBound
是什么了。
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"。
那就是说我从来没有遇到过做过这样的事情的人。