Wat is die beste manier om Itereer deur 'n verskeidenheid in Classic Asp VBScript?
-
08-06-2019 - |
Vra
In die kode hieronder
For i = LBound(arr) To UBound(arr)
Wat is die punt in te vra met behulp van LBound
? Dit is sekerlik altyd 0.
Oplossing
Hoekom nie For Each
gebruik? Die manier wat jy hoef nie te bekommer wat die LBound
en UBound
is.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Ander wenke
Daar is 'n goeie rede om NIE For i = LBound(arr) To UBound(arr)
dim arr(10)
ken elf lede van die skikking, 0 tot 10 (met die aanvaarding van die VB6 verstek opsie Base).
Baie VB6 programmeerders aanvaar die skikking is-een-gebaseerde, en nooit gebruik die toegekende arr(0)
. Ons kan 'n potensiële bron van foute te verwyder deur gebruik te maak van For i = 1 To UBound(arr)
of For i = 0 To UBound(arr)
, want dan is dit duidelik of arr(0)
gebruik word.
For each
maak 'n afskrif van elke reeks element, eerder as om 'n wyser.
Dit het twee probleme.
-
Wanneer ons probeer om 'n waarde aan 'n verskeidenheid element toewys, beteken dit nie na te dink oor die oorspronklike. Hierdie kode ken 'n waarde van 47 tot die veranderlike
i
, maar het geen invloed op die elemente vanarr
.arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
-
Ons weet nie die indeks van 'n skikking element in 'n
for each
, en ons is nie gewaarborg nie die volgorde van elemente (alhoewel dit blyk te wees ten einde.)
LBound
kan nie altyd 0.
Hoewel dit nie moontlik is om 'n skikking wat enigiets anders as 'n 0 Laer gebind in VBScript het te skep, is dit steeds moontlik om 'n verskeidenheid van variasies van 'n COM komponent wat 'n ander LBound
dalk gespesifiseerde haal.
Dit sê ek het nog nooit oor een wat so iets gedoen het kom.
Waarskynlik dit kom uit VB6. Want met Opsie Base verklaring in VB6, jy kan verander die ondergrens van skikkings soos volg:
Option Base 1
Ook in VB6, kan jy dit verander die ondergrens van 'n spesifieke reeks soos volg:
Dim myArray(4 To 42) As String
Ek het nog altyd vir elke ...