recorrer net for dinamico classic asp array arrays asp-classic vbscript

arrays - net - vbscript array



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

En el código a continuación

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

¿Cuál es el sentido al preguntar usando LBound ? Seguramente eso siempre es 0.


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


Siempre he usado For Each ...


¿Por qué no usar For Each ? De esta forma, no necesita preocuparse por lo que son LBound y UBound .

Dim x, y, z x = Array(1, 2, 3) For Each y In x z = DoSomethingWith(y) Next


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 un LBound diferente.

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


Hay una buena razón para NO USAR For 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 el arr(0) asignado arr(0) . Podemos eliminar una posible fuente de errores usando For i = 1 To UBound(arr) o For i = 0 To UBound(arr) , porque entonces está claro si arr(0) está siendo utilizado.

For each hace una copia de cada elemento del conjunto, 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) for each i in arr i = 47 next i Response.Write arr(0) ''- returns 3, not 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).