Hva er den beste måten å iterere gjennom en matrise i Classic Asp VBScript?

stemmer
32

I koden under

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

Hva er poenget i å spørre hjelp LBound? Sikkert som alltid er 0.

Publisert på 05/08/2008 klokken 14:07
kilden bruker
På andre språk...                            


5 svar

stemmer
46

Hvorfor ikke bruke For Each? På den måten trenger du ikke å bry seg hva LBoundog UBounder.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Svarte 05/08/2008 kl. 14:36
kilden bruker

stemmer
16

Det er en god grunn til å IKKE BRUKFor i = LBound(arr) To UBound(arr)

dim arr(10) tildeler elleve medlemmer av utvalg, fra 0 til 10 (forutsatt at VB6 standard Option Base).

Mange VB6 programmerere anta matrisen er en basert, og aldri bruke den tildelte arr(0). Vi kan fjerne en potensiell kilde til feil ved å bruke For i = 1 To UBound(arr)eller For i = 0 To UBound(arr), for da er det klart om arr(0)blir brukt.

For each gjør en kopi av hvert oppstillingselement, i stedet for en peker.

Dette har to problemer.

  1. Når vi prøver å tilordne en verdi til en matrise element, betyr det ikke nødvendigvis på original. Denne koden tildeler en verdi på 47 til det variable i, men påvirker ikke elementene arr.

    arr = Array (3,4,8)
    for hver i i arr
         i = 47
    neste jeg
    Response.Write arr (0) '- returnerer 3, ikke 47

  2. Vi vet ikke indeksen for en rekke element i en for each, og vi er ikke garantert rekkefølgen av elementene (selv om det ser ut til å være i orden.)

Svarte 23/09/2008 kl. 15:24
kilden bruker

stemmer
3

LBound kan ikke alltid være 0.

Mens det er ikke mulig å opprette en matrise som har noe annet enn en 0 Nedre grense i VBScript, er det fortsatt mulig å hente en rekke varianter av en COM komponent som kan være satt til en annen LBound.

Når det er sagt har jeg aldri kommet over en som har gjort noe sånt.

Svarte 24/09/2008 kl. 18:24
kilden bruker

stemmer
1

Jeg har alltid brukt for hver ...

Svarte 12/08/2008 kl. 14:34
kilden bruker

stemmer
1

Sannsynligvis det kommer fra VB6. Fordi med Option Base uttalelse i VB6, kan du endre den nedre grensen av arrays som dette:

Option Base 1

Også i VB6, kan du endre den nedre grense av et bestemt utvalg som dette:

Dim myArray(4 To 42) As String
Svarte 05/08/2008 kl. 14:24
kilden bruker

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