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

В коде ниже

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

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

5.08.2008 14:07:58
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

For Each y In x
    z = DoSomethingWith(y)
Next
56
15.08.2011 17:16:53
Вы не можете использовать For Eachдля непосредственного редактирования ячеек массива, так как yв вашем примере это копия ячейки массива, а не ее ссылка. Для редактирования массива, можно For i = LBound(arr) To UBound(arr)будет ссылаться на ячейку напрямую, используя arr(i)и редактируя содержимое ячейки (например arr(i) = Trim(arr(i))).
Michał Sacharewicz 29.05.2014 14:20:47

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

Option Base 1

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

Dim myArray(4 To 42) As String
2
5.08.2008 14:27:57

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

1
12.08.2008 14:34:32

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

18
27.01.2017 02:59:50

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

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

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

3
16.12.2015 08:10:40

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

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

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

0
30.06.2019 02:32:29