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

голоса
31

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

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

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

Задан 05/08/2008 в 15:07
источник пользователем
На других языках...                            


5 ответов

голоса
45

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

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

For Each y In x
    z = DoSomethingWith(y)
Next
Ответил 05/08/2008 в 15:36
источник пользователем

голоса
16

Существует хорошая причина , чтобы НЕ ИСПОЛЬЗОВАТЬ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.

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

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

Ответил 23/09/2008 в 16:24
источник пользователем

голоса
3

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

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

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

Ответил 24/09/2008 в 19:24
источник пользователем

голоса
1

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

Ответил 12/08/2008 в 15:34
источник пользователем

голоса
1

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

Option Base 1

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

Dim myArray(4 To 42) As String
Ответил 05/08/2008 в 15:24
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more