arrays - classic asp populate array




Qual è il modo migliore per scorrere un array in Classic Asp VBScript? (4)

Probabilmente viene da VB6. Perché con l'istruzione Option Base in VB6, puoi modificare il limite inferiore di array come questo:

Option Base 1

Anche in VB6, puoi modificare il limite inferiore di uno specifico array come questo:

Dim myArray(4 To 42) As String

Nel codice qui sotto

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

Qual è il punto nel chiedere l'uso di LBound ? Sicuramente è sempre 0.


Ho sempre usato For Each ...


LBound potrebbe non essere sempre 0.

Mentre non è possibile creare un array che abbia qualcosa diverso da un limite inferiore a 0 in VBScript, è comunque possibile recuperare una serie di varianti da un componente COM che potrebbe aver specificato un LBound diverso.

Detto questo, non ne ho mai visto uno che abbia fatto qualcosa del genere.


C'è una buona ragione per NON USARE For i = LBound(arr) To UBound(arr)

dim arr(10) alloca undici membri dell'array, da 0 a 10 (presupponendo la base opzione predefinita VB6).

Molti programmatori VB6 presumono che l'array sia basato su uno e non utilizza mai l' arr(0) assegnato arr(0) . Possiamo rimuovere una potenziale fonte di bug usando For i = 1 To UBound(arr) o For i = 0 To UBound(arr) , perché allora è chiaro se viene usato arr(0) .

For each crea una copia di ogni elemento dell'array, piuttosto che un puntatore.

Questo ha due problemi.

  1. Quando proviamo ad assegnare un valore a un elemento dell'array, esso non riflette sull'originale. Questo codice assegna un valore di 47 alla variabile i , ma non influenza gli elementi di arr .

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

  2. Non conosciamo l'indice di un elemento dell'array in a for each e non ci viene garantita la sequenza di elementi (anche se sembra essere in ordine).







vbscript