2008-08-05 24 views

Respuesta

45

Por qué no usar For Each? De esta manera, no es necesario que se ocupe de lo que son LBound y UBound.

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

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

No puede usar 'For Each' para editar directamente las celdas de la matriz, ya que' y' en su ejemplo es una copia de la celda de la matriz, no su referencia. Para la edición de matriz, 'For i = LBound (arr) To UBound (arr)' permitirá referirse a la celda directamente usando 'arr (i)' y editar el contenido de la celda (como 'arr (i) = Trim (arr (i)))) '). –

1

Probablemente proviene de VB6. Porque con Option Base declaración en Visual Basic 6, se puede alterar el límite inferior de las matrices de la siguiente manera:

Option Base 1 

También en Visual Basic 6, se puede alterar el límite inferior de una matriz específica de esta manera:

Dim myArray(4 To 42) As String 
1

Siempre he utilizado para cada ...

16

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

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

Muchos programadores de VB6 suponen que la matriz se basa en una sola fuente y nunca utilizan el arr(0) asignado. 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 se está utilizando arr(0).

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 sabemos el índice de un elemento de la matriz en un for each, y que no se garantiza la secuencia de elementos (aunque parece estar en orden.)

3

LBound puede no ser siempre 0.

Aunque 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 ent que puede haber especificado un LBound diferente.

Dicho esto, nunca encontré uno que haya hecho algo así.

Cuestiones relacionadas