Чего лучший способ состоит в том, чтобы выполнить итерации через массив в Классическом VBScript Asp?

Я использую это при создании динамического массива. Если у вас есть класс или структура. И это работает. Пример:

struct Sprite {
    int x;
};

int main () {
   int num = 50;
   Sprite **spritearray;//a pointer to a pointer to an object from the Sprite class
   spritearray = new Sprite *[num];
   for (int n = 0; n < num; n++) {
       spritearray[n] = new Sprite;
       spritearray->x = n * 3;
  }

   //delete from random position
    for (int n = 0; n < num; n++) {
        if (spritearray[n]->x < 0) {
      delete spritearray[n];
      spritearray[n] = NULL;
        }
    }

   //delete the array
    for (int n = 0; n < num; n++) {
      if (spritearray[n] != NULL){
         delete spritearray[n];
         spritearray[n] = NULL;
      }
    }
    delete []spritearray;
    spritearray = NULL;

   return 0;
  } 
37
задан DhruvJoshi 16 December 2015 в 08:12
поделиться

6 ответов

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

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

For Each y In x
    z = DoSomethingWith(y)
Next
51
ответ дан stealthyninja 27 November 2019 в 04:34
поделиться

Существует серьезное основание к [1 122] НЕ, ИСПОЛЬЗУЮТ 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)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47
  2. Мы не знаем индекса элемента массива в for each, и нам не гарантируют последовательность элементов (хотя это, кажется, в порядке.)

17
ответ дан Martha 27 November 2019 в 04:34
поделиться

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

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

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

3
ответ дан DhruvJoshi 27 November 2019 в 04:34
поделиться

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

Option Base 1

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

Dim myArray(4 To 42) As String
2
ответ дан huseyint 27 November 2019 в 04:34
поделиться

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

1
ответ дан James Marshall 27 November 2019 в 04:34
поделиться

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

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

Hope это помогает.

0
ответ дан Javi 27 November 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: