В коде нижеКаков наилучший способ перебора массива в Classic Asp VBScript?
For i = LBound(arr) To UBound(arr)
Какой смысл спрашивать с использованием LBound
? Конечно, это всегда 0.
В коде нижеКаков наилучший способ перебора массива в Classic Asp VBScript?
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
Возможно, он исходит от VB6. Потому что с Option Base заявлением в VB6, вы можете изменить нижнюю границу массива, как это:
Option Base 1
Также в VB6, вы можете изменить нижнюю границу определенного массива, как это:
Dim myArray(4 To 42) As String
Я всегда использовал для каждого ...
Существует хорошая причина, чтобы НЕ ИСПОЛЬЗОВАТЬ 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
делает копию каждого элемента массива, а не указателя.
У этой проблемы есть две проблемы.
Когда мы пытаемся присвоить значение элементу массива, оно не отражается на оригинале. Этот код присваивает значение 47 переменной i
, но не влияет на элементы 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.
Хотя невозможно создать массив, который имеет ничего, кроме 0 нижней границы в VBScript, все еще можно получить массив вариантов из COM-компонента который может указать другой LBound
.
Это говорит, что я никогда не сталкивался с тем, кто сделал что-то подобное.
Вы не можете использовать `For Every` для непосредственного редактирования ячеек массива, так как` y` в вашем примере является копией ячейки массива, а не ссылкой. Для редактирования массива `For i = LBound (arr) To UBound (arr)` позволит напрямую ссылаться на ячейку с помощью `arr (i)` и редактировать содержимое ячейки (например, `arr (i) = Trim (arr (i)) `). – 2014-05-29 14:20:47