Quelle est la meilleure façon de parcourir un tableau dans Classic Asp VBScript?

Dans le code ci-dessous

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

Quel est le point de demander en utilisant LBound ? Sûrement c'est toujours 0.

0

5 Réponses

Probablement, il vient de VB6. Parce qu'avec l'instruction Option Base dans VB6, vous peut modifier la limite inférieure de tableaux comme ceci:

Option Base 1

Toujours dans VB6, vous pouvez modifier la limite inférieure d'un tableau spécifique comme ceci:

Dim myArray(4 To 42) As String
0
ajouté

Pourquoi ne pas utiliser For Each ? De cette façon, vous n'avez pas besoin de vous préoccuper de ce que sont LBound et UBound .

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

For Each y In x
    z = DoSomethingWith(y)
Next
0
ajouté
Vous ne pouvez pas utiliser For Each pour éditer directement des cellules de tableau, puisque y dans votre exemple est une copie de la cellule du tableau, pas sa référence. Pour l'édition de tableau, Pour i = LBound (arr) Pour UBound (arr) permettra de se référer directement à la cellule en utilisant arr (i) et modifier le contenu de la cellule (comme < code> arr (i) = Trim (arr (i)) ).
ajouté l'auteur Micha? Sacharewicz, source

J'ai toujours utilisé pour chaque ...

0
ajouté

LBound may not always be 0.

Bien qu'il ne soit pas possible de créer un tableau qui ait autre chose qu'une limite inférieure de 0 dans VBScript, il est toujours possible d'extraire un tableau de variantes d'un composant COM qui peut avoir spécifié un LBound différent.

Cela dit, je n'en ai jamais rencontré un qui ait fait quelque chose comme ça.

0
ajouté

There is a good reason to NOT USE For i = LBound(arr) To UBound(arr)

dim arr(10) allocates eleven members of the array, 0 through 10 (assuming the VB6 default Option Base).

Beaucoup de programmeurs VB6 supposent que le tableau est basé sur un, et n'utilisent jamais le arr attribué (0) . Nous pouvons supprimer une source potentielle de bugs en utilisant Pour i = 1 à UBound (arr) ou Pour i = 0 à UBound (arr) , car alors il est clair si arr (0) est utilisé.

For each makes a copy of each array element, rather than a pointer.

Cela a deux problèmes.

  1. When we try to assign a value to an array element, it doesn't reflect on original. This code assigns a value of 47 to the variable i, but does not affect the elements of arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47
  2. We don't know the index of an array element in a for each, and we are not guaranteed the sequence of elements (although it seems to be in order.)

0
ajouté