В приведенном ниже коде
For i = LBound(arr) To UBound(arr)
В чем смысл использования LBound
? Конечно, это всегда 0.
В приведенном ниже коде
For i = LBound(arr) To UBound(arr)
В чем смысл использования LBound
? Конечно, это всегда 0.
Почему бы не использовать For Each
? Таким образом вам не нужно заботиться о том, что LBound
и UBound
.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Есть веская причина для НЕ ИСПОЛЬЗОВАТЬ For i = LBound(arr) To UBound(arr)
dim arr(10)
выделяет одиннадцать членов массива с 0 по 10 (предполагается, что базовая база по умолчанию VB6).
Многие программисты VB6 предполагают, что массив основан на одном уровне и никогда не использует выделенный arr(0)
. Мы можем удалить потенциальный источник ошибок с помощью For i = 1 To UBound(arr)
или For i = 0 To UBound(arr)
, потому что тогда ясно, используется ли arr(0)
.
For each
делает копию каждого элемента массива, а не указателя.
У этого есть две проблемы.
Когда мы пытаемся присвоить значение элементу массива, оно не отражается на оригинале. Этот код присваивает переменную 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
Мы не знаем индекс элемента массива в For each
, и нам не гарантируется последовательность элементов (хотя, кажется, порядок).
LBound
может не всегда быть 0.
Пока невозможно создать массив, который имеет ничего, кроме нижней границы в VBScript, все равно можно получить массив вариантов из COM-компонента, который может указать другой LBound
.
Это говорит, что я никогда не сталкивался с тем, что сделал что-то подобное.
Возможно, он исходит от VB6. Поскольку с помощью Option Base в VB6 вы можете изменить нижнюю границу массивов следующим образом:
Option Base 1
Также в VB6 вы можете изменить нижнюю границу определенного массива следующим образом:
Dim myArray(4 To 42) As String
Я всегда использовал для каждого...
Это мой подход:
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
Надеюсь, поможет.