Was ist der beste Weg durch eine Reihe in der klassischen Asp VBScript iterieren?

stimmen
31

Im folgenden Code

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

Was ist der Punkt mit zu fragen LBound? Das ist doch immer 0.

Veröffentlicht am 05/08/2008 um 15:07
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
45

Warum nicht For Each? Auf diese Weise brauchen Sie nicht , was die Pflege LBoundund UBoundsind.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Beantwortet am 05/08/2008 um 15:36
quelle vom benutzer

stimmen
16

Es gibt einen guten Grund, NOT USEFor i = LBound(arr) To UBound(arr)

dim arr(10) weist elf Mitglieder des Arrays, 0 bis 10 (die VB6 Standard Option Base vorausgesetzt).

Viele Programmierer VB6 übernehmen das Array ist ein basiert und verwenden nie zugewiesen arr(0). Wir können durch die Verwendung eine potentielle Fehlerquelle entfernen For i = 1 To UBound(arr)oder For i = 0 To UBound(arr), denn dann ist es klar, ob arr(0)verwendet wird.

For each macht eine Kopie von jedem Array-Elemente, sondern als ein Zeiger.

Dies hat zwei Probleme.

  1. Wenn wir versuchen , einen Wert zu einem Array - Element zugewiesen werden , reflektiert es nicht auf Original. Dieser Code weist einen Wert von 47 auf die Variable i, aber keinen Einfluss auf die Elemente arr.

    arr = array (3,4,8)
    für jedes i in arr
         i = 47
    nächste i
    Response.Write arr (0) ‚- 3 zurück, nicht 47

  2. 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.)

Beantwortet am 23/09/2008 um 16:24
quelle vom benutzer

stimmen
3

LBound kann nicht immer 0 sein.

Zwar ist es nicht möglich ist , ein Array zu erstellen , die etwas anderes als ein 0 Untere Grenze in VBScript hat, ist es immer noch möglich , eine Reihe von Varianten aus einer COM - Komponente abzurufen , die eine andere übergeben werden LBound.

Das heißt ich habe noch nie über ein gekommen, dass so etwas getan hat.

Beantwortet am 24/09/2008 um 19:24
quelle vom benutzer

stimmen
1

Ich habe immer für jede verwendete ...

Beantwortet am 12/08/2008 um 15:34
quelle vom benutzer

stimmen
1

Wahrscheinlich kommt es von VB6. Denn mit Option Base - 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 Array wie folgt ändern:

Dim myArray(4 To 42) As String
Beantwortet am 05/08/2008 um 15:24
quelle vom benutzer

stimmen
0

Das ist mein Ansatz:

dim arrFormaA(15)
arrFormaA( 0 ) = "formaA_01.txt"
arrFormaA( 1 ) = "formaA_02.txt"
arrFormaA( 2 ) = "formaA_03.txt"
arrFormaA( 3 ) = "formaA_04.txt"
arrFormaA( 4 ) = "formaA_05.txt"
arrFormaA( 5 ) = "formaA_06.txt"
arrFormaA( 6 ) = "formaA_07.txt"
arrFormaA( 7 ) = "formaA_08.txt"
arrFormaA( 8 ) = "formaA_09.txt"
arrFormaA( 9 ) = "formaA_10.txt"
arrFormaA( 10 ) = "formaA_11.txt"
arrFormaA( 11 ) = "formaA_12.txt"
arrFormaA( 12 ) = "formaA_13.txt"
arrFormaA( 13 ) = "formaA_14.txt"
arrFormaA( 14 ) = "formaA_15.txt"

Wscript.echo(UBound(arrFormaA))
''displays "15"

For i = 0 To UBound(arrFormaA)-1
    Wscript.echo(arrFormaA(i))
Next

Ich hoffe es hilft.

Beantwortet am 30/06/2019 um 05:32
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more