Im folgenden CodeWas ist der beste Weg, um ein Array in Classic Asp VBScript zu durchlaufen?
For i = LBound(arr) To UBound(arr)
Was der Punkt ist LBound
zu fragen, mit? Sicher ist das immer 0.
Im folgenden CodeWas ist der beste Weg, um ein Array in Classic Asp VBScript zu durchlaufen?
For i = LBound(arr) To UBound(arr)
Was der Punkt ist LBound
zu fragen, mit? Sicher ist das immer 0.
Warum nicht verwenden For Each
? Auf diese Weise müssen Sie sich nicht darum kümmern, was die LBound
und UBound
sind.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Wahrscheinlich kommt es von VB6. Denn mit Option Base Aussage 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 Array wie folgt ändern:
Dim myArray(4 To 42) As String
ich immer For Each verwendet haben ...
Es gibt einen guten Grund, nicht
dim arr(10)
weist elf Mitglieder des Arrays For i = LBound(arr) To UBound(arr)
verwenden, um ist, 10 0 durch (vorausgesetzt, die VB6-Standardoptionsbasis).
Viele VB6-Programmierer gehen davon aus, dass das Array einbasig ist, und verwenden Sie niemals das zugewiesene . Wir können eine potentielle Fehlerquelle entfernen, indem wir For i = 1 To UBound(arr)
oder For i = 0 To UBound(arr)
verwenden, weil dann klar ist, ob arr(0)
verwendet wird.
For each
erstellt eine Kopie jedes Array-Elements statt eines Zeigers.
Dies hat zwei Probleme.
Wenn wir versuchen, einem Array-Element einen Wert zuzuweisen, spiegelt es nicht das Original wider. Dieser Code weist der Variablen i
den Wert 47 zu, wirkt sich jedoch nicht auf die Elemente aus.
arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
Wir wissen nicht, den Index eines Array-Elements in einem for each
, und wir sind nicht die Folge von Elementen gewährleistet ist (obwohl es in Ordnung zu sein scheint.)
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 immer noch möglich, ein Array von Varianten aus einer COM-Komponente abzurufen ent, die möglicherweise eine andere LBound
angegeben haben.
Das sagte ich habe noch nie eine, die so etwas getan hat.
Sie können 'For Each' nicht verwenden, um Array-Zellen direkt zu bearbeiten, da' y' in Ihrem Beispiel eine Kopie der Array-Zelle ist, nicht ihre Referenz. Für die Bearbeitung von Arrays ermöglicht 'For i = LBound (arr) To UBound (arr)', dass man mit 'arr (i)' direkt auf die Zelle verweist und den Zelleninhalt editiert (wie 'arr (i) = Trim (arr (i)) '). –