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

В коде ниже

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

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

5 ответов

Решение

Почему бы не использовать 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 делает копию каждого элемента массива, а не указатель.

Это имеет две проблемы.

  1. Когда мы пытаемся присвоить значение элементу массива, оно не отражается на оригинале. Этот код присваивает значение 47 переменной i, но не влияет на элементы arr,

     arr = Array(3,4,8)
    для каждого я в обр
         я = 47
    следующий я
    Response.Write arr(0) '- возвращает 3, а не 47 

  2. Мы не знаем индекс элемента массива в for each и нам не гарантируется последовательность элементов (хотя, кажется, в порядке.)

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

Хотя в VBScript невозможно создать массив, который имеет что-либо, кроме нижней границы 0, все еще возможно получить массив вариантов из компонента 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

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

Другие вопросы по тегам