¿Cuál es la mejor manera de iterar a través de una matriz en Classic Asp VBScript?

votos
31

En el código a continuación

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

¿Para qué sirve preguntar LBound? Seguramente eso siempre es 0.

Publicado el 05/08/2008 a las 15:07
fuente por usuario
En otros idiomas...                            


6 respuestas

votos
45

¿Por qué no usar For Each? De esta forma, no es necesario que se preocupe por lo que son LBoundy lo que UBoundson.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Respondida el 05/08/2008 a las 15:36
fuente por usuario

votos
16

Hay una buena razón para NO USARFor i = LBound(arr) To UBound(arr)

dim arr(10) asigna once miembros de la matriz, de 0 a 10 (suponiendo que la Base de opciones predeterminada de VB6).

Muchos programadores de VB6 suponen que la matriz está basada en una sola fuente y nunca utilizan la asignada arr(0). Podemos eliminar una posible fuente de errores utilizando For i = 1 To UBound(arr)o For i = 0 To UBound(arr), porque entonces está claro si arr(0)se está utilizando.

For each hace una copia de cada elemento de la matriz, en lugar de un puntero.

Esto tiene dos problemas.

  1. Cuando intentamos asignar un valor a un elemento de matriz, no se refleja en el original. Este código asigna un valor de 47 a la variable i, pero no afecta a los elementos de arr.

    arr = Array (3,4,8)
    para cada i en arr
         i = 47
    siguiente yo
    Response.Write arr (0) '- devuelve 3, no 47

  2. No conocemos el índice de un elemento de matriz en a for each, y no tenemos garantizada la secuencia de elementos (aunque parece estar en orden).

Respondida el 23/09/2008 a las 16:24
fuente por usuario

votos
3

LBound puede no ser siempre 0

Si bien no es posible crear una matriz que tenga algo más que un límite inferior de 0 en VBScript, aún es posible recuperar una matriz de variantes de un componente COM que puede haber especificado una diferente LBound.

Dicho esto, nunca he encontrado uno que haya hecho algo así.

Respondida el 24/09/2008 a las 19:24
fuente por usuario

votos
1

Siempre he usado For Each ...

Respondida el 12/08/2008 a las 15:34
fuente por usuario

votos
1

Probablemente proviene de VB6. Porque con la instrucción Base de opción en VB6, puede alterar el límite inferior de matrices como esta:

Option Base 1

También en VB6, puede alterar el límite inferior de una matriz específica como esta:

Dim myArray(4 To 42) As String
Respondida el 05/08/2008 a las 15:24
fuente por usuario

votos
0

Este es mi enfoque:

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

Espero eso ayude.

Respondida el 30/06/2019 a las 05:32
fuente por usuario

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