Was ist der beste Weg, ein Array in Classic Asp VBScript zu durchlaufen?
-
08-06-2019 - |
Frage
Im Code unten
For i = LBound(arr) To UBound(arr)
Was bringt es, nach using zu fragen? LBound
?Sicherlich ist das immer 0.
Lösung
Warum nicht verwenden? For Each
?Auf diese Weise müssen Sie sich nicht darum kümmern, was das ist LBound
Und UBound
Sind.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Andere Tipps
Dafür gibt es einen guten Grund NICHT NUTZEN For i = LBound(arr) To UBound(arr)
dim arr(10)
Weist elf Mitglieder des Arrays zu, 0 bis 10 (unter der Annahme der VB6-Standardoptionsbasis).
Viele VB6-Programmierer gehen davon aus, dass das Array einsbasiert ist, und verwenden niemals das zugewiesene Array arr(0)
.Durch die Verwendung können wir eine potenzielle Fehlerquelle beseitigen For i = 1 To UBound(arr)
oder For i = 0 To UBound(arr)
, denn dann ist klar, ob arr(0)
wird benutzt.
For each
Erstellt eine Kopie jedes Array-Elements und keinen Zeiger.
Dies hat zwei Probleme.
Wenn wir versuchen, einem Array-Element einen Wert zuzuweisen, spiegelt dieser nicht das Original wider.Dieser Code weist der Variablen den Wert 47 zu
i
, wirkt sich jedoch nicht auf die Elemente von ausarr
.arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
Wir kennen den Index eines Array-Elements in a nicht
for each
, und wir können die Reihenfolge der Elemente nicht garantieren (obwohl sie in Ordnung zu sein scheint).
LBound
ist möglicherweise nicht immer 0.
Während es in VBScript nicht möglich ist, ein Array zu erstellen, das etwas anderes als eine Untergrenze von 0 hat, ist es dennoch möglich, ein Array von Varianten von einer COM-Komponente abzurufen, die möglicherweise eine andere angegeben hat LBound
.
Allerdings ist mir noch nie jemand begegnet, der so etwas getan hat.
Wahrscheinlich kommt es von VB6.Denn mit Optionsbasis Anweisung in VB6 können Sie die untere Grenze von Arrays wie folgt ändern:
Option Base 1
Auch in VB6 können Sie die untere Grenze eines bestimmten Arrays wie folgt ändern:
Dim myArray(4 To 42) As String
Ich habe immer For Each verwendet ...