Co jest najlepszym sposobem na iterację tablicy w Classic ASP VBScript?

głosy
31

W poniższym kodzie

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

Jaki jest sens pytać użyciu LBound? Z pewnością jest to zawsze 0.

Utwórz 05/08/2008 o 15:07
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
1

Prawdopodobnie pochodzi z VB6. Ponieważ z Wariant podstawowy oświadczenie w VB6, można zmienić dolną granicę tablic, jak poniżej:

Option Base 1

Również w VB6, można zmieniać dolnej granicy określonej tablicy jak poniżej:

Dim myArray(4 To 42) As String
Odpowiedział 05/08/2008 o 15:24
źródło użytkownik

głosy
45

Dlaczego nie skorzystać For Each? W ten sposób nie trzeba obchodzi mnie, co LBoundi UBoundsą.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Odpowiedział 05/08/2008 o 15:36
źródło użytkownik

głosy
1

Zawsze stosuje się dla każdej ...

Odpowiedział 12/08/2008 o 15:34
źródło użytkownik

głosy
16

Jest to dobry powód, aby NIE UŻYWAĆFor i = LBound(arr) To UBound(arr)

dim arr(10) przydziela jedenaście elementy tablicy, od 0 do 10 (przy założeniu VB6 opcja domyślna baza).

Wielu programistów VB6 zakładać tablica jest oparte i nigdy nie używać przydzielone arr(0). Możemy usunąć potencjalne źródło błędów za pomocą For i = 1 To UBound(arr)lub For i = 0 To UBound(arr), bo to jest jasne, czy arr(0)jest używana.

For each tworzy kopię każdego elementu tablicy, zamiast wskaźnika.

To ma dwa problemy.

  1. Kiedy staramy się przypisać wartość elementu tablicy, nie odzwierciedla na oryginale. Ten kod przypisuje wartość 47 do zmiennej i, ale nie wpływa na elementy arr.

    ARR = Array (3,4,8)
    dla każdego i na arr
         I = 47
    następne I
    Response.Write ARR (0) „- zwraca 3 nie 47

  2. Nie wiemy indeks elementu tablicy w for each, i nie są gwarantowane kolejność elementów (choć wydaje się być w porządku).

Odpowiedział 23/09/2008 o 16:24
źródło użytkownik

głosy
3

LBound nie zawsze może być 0.

Mimo, że nie jest możliwe, aby utworzyć tablicę, która ma coś innego niż 0 dolna granica w VBScript, nadal jest możliwe, aby odzyskać szereg wariantów z komponentu COM, które mogą mieć określony inny LBound.

Powiedział, że nigdy nie natknąć się ten, który zrobił coś takiego.

Odpowiedział 24/09/2008 o 19:24
źródło użytkownik

głosy
0

To jest moje podejście:

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

Mam nadzieję, że to pomoże.

Odpowiedział 30/06/2019 o 05:32
źródło użytkownik

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