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

StackOverflow https://stackoverflow.com/questions/2348

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Другие советы

Для этого есть веская причина НЕ ИСПОЛЬЗОВАТЬ For i = LBound(arr) To UBound(arr)

dim arr(10) выделяет одиннадцать элементов массива от 0 до 10 (при условии использования опции VB6 по умолчанию Base).

Многие программисты 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)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

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

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

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

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

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

Option Base 1

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

Dim myArray(4 To 42) As String

Я всегда использовал Для Каждого Из них...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top