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

Translate

Dans le code ci-dessous

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

Quel est l'intérêt de demander à utiliserLBound? Sûrement c'est toujours 0.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Pourquoi ne pas utiliserFor Each? De cette façon, vous n'avez pas besoin de vous soucier de ce queLBoundetUBoundsont.

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

For Each y In x
    z = DoSomethingWith(y)
Next
La source
Translate

Il y a une bonne raison pourNE PAS UTILISERFor i = LBound(arr) To UBound(arr)

dim arr(10)alloue onze membres du tableau, de 0 à 10 (en supposant la base d'options par défaut de VB6).

De nombreux programmeurs VB6 supposent que le tableau est basé sur un et n'utilisent jamais lesarr(0). Nous pouvons supprimer une source potentielle de bogues en utilisantFor i = 1 To UBound(arr)ouFor i = 0 To UBound(arr), car alors il est clair siarr(0)est en train d'être utilisé.

For eachfait une copie de chaque élément du tableau, plutôt qu'un pointeur.

Cela pose deux problèmes.

  1. Lorsque nous essayons d'attribuer une valeur à un élément du tableau, cela ne reflète pas l'original. Ce code attribue une valeur de 47 à la variablei, mais n'affecte pas les éléments dearr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. Nous ne connaissons pas l'index d'un élément de tableau dans unfor each, et nous ne sommes pas garantis de la séquence des éléments (bien que cela semble être en ordre.)

La source
Translate

LBoundpeut ne pas toujours être égal à 0.

Bien qu'il ne soit pas possible de créer un tableau qui a autre chose qu'une borne inférieure 0 dans VBScript, il est toujours possible de récupérer un tableau de variantes à partir d'un composant COM qui peut avoir spécifié un autreLBound.

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

La source
Translate

Cela vient probablement de VB6. Parce qu'avecBase d'optiondans VB6, vous pouvez modifier la limite inférieure des tableaux comme ceci:

Option Base 1

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

Dim myArray(4 To 42) As String
La source
Translate

J'ai toujours utilisé For Each ...

La source
Translate

Voici ma démarche:

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

J'espère que cela aide.

La source