Qual è il modo migliore per scorrere un array in Classic Asp VBScript?
-
08-06-2019 - |
Domanda
Nel codice riportato di seguito
For i = LBound(arr) To UBound(arr)
Qual è il punto nel chiedere utilizzando LBound
?Certo che è sempre 0.
Soluzione
Perché non utilizzare For Each
?In modo che non importa ciò che il LBound
e UBound
sono.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Altri suggerimenti
C'è un buon motivo per NON UTILIZZARE For i = LBound(arr) To UBound(arr)
dim arr(10)
alloca undici membri dell'array da 0 a 10 (supponendo che il VB6 Opzione predefinita di Base).
Molti programmatori VB6 assumere la matrice è uno, e non usare mai assegnate arr(0)
.Siamo in grado di rimuovere una potenziale fonte di bug utilizzando For i = 1 To UBound(arr)
o For i = 0 To UBound(arr)
, perché allora è chiaro se arr(0)
viene utilizzato.
For each
crea una copia di ogni elemento di un array, piuttosto che un puntatore.
Questo ha due problemi.
Quando si tenta di assegnare un valore ad un elemento di un array, non riflette su originale.Questo codice viene assegnato un valore di 47 alla variabile
i
, ma non incidere sugli elementi dell'arr
.arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
Non sappiamo l'indice di un elemento di un array in un
for each
, e non è garantita la sequenza di elementi (anche se sembra essere in ordine.)
LBound
non può essere sempre a 0.
Mentre non è possibile creare un array che ha qualcosa di diverso da 0 (Lower bound in VBScript, è ancora possibile recuperare una serie di varianti da un componente COM che può aver indicato una diversa LBound
.
Detto questo non ho mai trovato uno che ha fatto una cosa del genere.
Probabilmente si tratta di VB6.Perché con Opzione Base istruzione in VB6, è possibile modificare il limite inferiore di matrici come questo:
Option Base 1
Anche in VB6, è possibile modificare il limite inferiore di una specifica matrice:
Dim myArray(4 To 42) As String
Ho sempre usato Per Ogni...