42 Stimmen

Was ist der beste Weg, um durch ein Array in Classic Asp VBScript zu iterieren?

Im folgenden Code

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

Welchen Sinn hat es zu fragen, indem man LBound ? Sicherlich ist das immer 0.

65voto

Chris Farmer Punkte 24274

Warum nicht For Each ? Auf diese Weise müssen Sie sich nicht darum kümmern, was die LBound y UBound sind.

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

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

21voto

xpda Punkte 15262

Dafür gibt es einen guten Grund NICHT ZU VERWENDEN For i = LBound(arr) To UBound(arr)

dim arr(10) weist elf Mitglieder des Arrays zu, 0 bis 10 (unter Annahme der VB6-Standardoption Base).

Viele VB6-Programmierer gehen davon aus, dass das Array einbasig ist, und verwenden nie die zugewiesenen arr(0) . Wir können eine potenzielle Fehlerquelle beseitigen, indem wir For i = 1 To UBound(arr) o For i = 0 To UBound(arr) , denn dann ist klar, ob arr(0) verwendet wird.

For each macht eine Kopie von jedem Array-Element, anstatt eines Zeigers.

Dies hat zwei Probleme.

  1. Wenn wir versuchen, einem Array-Element einen Wert zuzuweisen, wird dieser nicht im Original angezeigt. Dieser Code weist der Variablen einen Wert von 47 zu i , wirkt sich aber nicht auf die Elemente von arr .

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47
  2. Wir kennen den Index eines Array-Elements nicht in for each und wir haben keine Garantie für die Reihenfolge der Elemente (obwohl sie in Ordnung zu sein scheint).

4voto

AnthonyWJones Punkte 182582

LBound muss nicht immer 0 sein.

Während es in VBScript nicht möglich ist, ein Array zu erstellen, das eine andere untere Grenze als 0 hat, ist es dennoch möglich, ein Array von Varianten von einer COM-Komponente abzurufen, die möglicherweise eine andere LBound .

Allerdings bin ich noch nie einem begegnet, der so etwas getan hat.

2voto

huseyint Punkte 14760

Wahrscheinlich stammt es aus VB6. Denn mit Option Basis 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

1voto

James Marshall Punkte 630

Ich habe immer For Each-Schleifen verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X