Vă mulțumim pentru susținere

Care este cel mai bun mod de a itera printr-un matrice în VBScript Classic Asp?

În codul de mai jos

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

Care este punctul în care cereți utilizarea LBound ? Cu siguranță că este întotdeauna 0.

0
adăugat editat

5 răspunsuri

Probabil vine de la VB6. Deoarece prin intermediul instrucțiunii opțiunea Base din VB6, tu poate modifica limita inferioară a unor astfel de elemente:

Option Base 1

De asemenea, în VB6, puteți modifica limita inferioară a unei matrice specifice:

Dim myArray(4 To 42) As String
0
adăugat

De ce nu folosiți pentru fiecare ? În acest fel nu trebuie să vă interesați ce sunt LBound și UBound .

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

For Each y In x
    z = DoSomethingWith(y)
Next
0
adăugat
Nu puteți folosi For Each pentru a edita direct celulele matrice, deoarece y în exemplul dvs. este o copie a celulei matrice, nu este o referință. Pentru editare în matrice, Pentru i = LBound (arr) În UBound (arr) se va face referire la celula folosind arr (i) arr (i) = Trim (arr (i)) ).
adăugat autor Micha? Sacharewicz

Am folosit mereu pentru fiecare ...

0
adăugat

LBound may not always be 0.

Deși nu este posibil să se creeze o matrice care are altceva decât o limită inferioară 0 în VBScript, este încă posibil să se recupereze o serie de variante dintr-o componentă COM care poate să fi specificat un LBound diferit.

Asta a spus că nu am întâlnit niciodată unul care a făcut ceva de genul asta.

0
adăugat

There is a good reason to NOT USE For i = LBound(arr) To UBound(arr)

dim arr(10) allocates eleven members of the array, 0 through 10 (assuming the VB6 default Option Base).

Mulți programatori VB6 presupun că matricea este bazată pe una și nu utilizează niciodată codul arr (0) alocat. Putem elimina o sursă potențială de erori folosind Pentru i = 1 Pentru UBound (arr) sau Pentru i = 0 În UBound (arr) . arr (0) este utilizat.

For each makes a copy of each array element, rather than a pointer.

Acest lucru are două probleme.

  1. When we try to assign a value to an array element, it doesn't reflect on original. This code assigns a value of 47 to the variable i, but does not affect the elements of arr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47
  2. We don't know the index of an array element in a for each, and we are not guaranteed the sequence of elements (although it seems to be in order.)

0
adăugat