Подтвердить что ты не робот

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

В приведенном ниже коде

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

В чем смысл использования LBound? Конечно, это всегда 0.

4b9b3361

Ответ 1

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

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

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

Ответ 2

Есть веская причина для НЕ ИСПОЛЬЗОВАТЬ 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, и нам не гарантируется последовательность элементов (хотя, кажется, порядок).

Ответ 3

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

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

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

Ответ 4

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

Option Base 1

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

Dim myArray(4 To 42) As String

Ответ 5

Я всегда использовал для каждого...

Ответ 6

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

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

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