Как лучше всего перебирать массив в Classic Asp VBScript?

В коде ниже

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

Какой смысл спрашивать с помощью LBound ? Конечно, это всегда 0.

Ответов (6)

Решение

Почему бы не использовать For Each ? Таким образом, вам не нужно заботиться о том, что такое LBound и UBound .

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

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

Это мой подход:

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

Надеюсь, это поможет.

Наверное, от VB6. Поскольку с помощью оператора Option Base в VB6 вы можете изменить нижнюю границу массивов следующим образом:

Option Base 1

Также в VB6 вы можете изменить нижнюю границу определенного массива следующим образом:

Dim myArray(4 To 42) As String

Я всегда использовал цикл For Each.

Есть веская причина НЕ ИСПОЛЬЗОВАТЬFor i = LBound(arr) To UBound(arr)

dim arr(10) выделяет одиннадцать элементов массива от 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 = Массив (3,4,8)
    для каждого i в arr
         я = 47
    следующий я
    Response.Write arr (0) '- возвращает 3, а не 47
  2. Мы не знаем индекс элемента массива в for each, и нам не гарантируется последовательность элементов (хотя, похоже, она в порядке).

LBound не всегда может быть 0.

Хотя в VBScript невозможно создать массив, который имеет что-либо, кроме нижней границы 0, все же возможно получить массив вариантов из компонента COM, который мог указать другое LBound .

Тем не менее, я никогда не встречал человека, который бы делал что-то подобное.