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

StackOverflow https://stackoverflow.com/questions/2348

  •  08-06-2019
  •  | 
  •  

Pregunta

En el siguiente código

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

¿Cuál es el punto de pedir el uso de LBound?Seguro que es siempre 0.

¿Fue útil?

Solución

¿Por qué no usar For Each?De esa manera usted no necesita atención lo que el LBound y UBound son.

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

For Each y In x
    z = DoSomethingWith(y)
Next

Otros consejos

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

dim arr(10) asigna los once miembros de la matriz, de 0 a 10 (suponiendo que el VB6 Opción predeterminada de la Base).

Muchos programadores de VB6 suponga que la matriz está basada en uno, y nunca utilizar el asignado arr(0).Podemos eliminar una fuente potencial de errores mediante el uso de For i = 1 To UBound(arr) o For i = 0 To UBound(arr), porque entonces es claro si arr(0) está siendo utilizado.

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

Esto tiene dos problemas.

  1. Cuando tratamos de asignar un valor a un elemento de matriz, que no refleja en 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 sabemos el índice de un elemento de matriz en un for each, y no se nos garantiza que la secuencia de elementos (a pesar de que parece estar en orden.)

LBound puede no ser siempre 0.

Si bien no es posible crear una matriz que tiene algo distinto de 0 límite Inferior en VBScript, todavía es posible recuperar una serie de variantes de un componente COM que haya especificado una diferente LBound.

Que dijo que nunca he encontrado uno que haya hecho nada de eso.

Probablemente se trata de VB6.Porque con Opción De Base declaración en VB6, puede alterar el límite inferior de las matrices como este:

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

Yo siempre he usado Para Cada...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top