Jaký je nejlepší způsob, jak iterovat pole v klasickém Asp VBScript?

hlasů
31

V níže uvedeném kódu

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

Jaký to má smysl ptát se pomocí LBound? Jistě, že je vždy 0.

Položena 05/08/2008 v 15:07
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
45

Proč nevyužít For Each? Tímto způsobem nemusíte se starat, co je LBounda UBoundjsou.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Odpovězeno 05/08/2008 v 15:36
zdroj uživatelem

hlasů
16

Tam je dobrý důvod, aby NEPOUŽÍVEJTEFor i = LBound(arr) To UBound(arr)

dim arr(10) přiděluje jedenáct členy pole, 0 až 10 (za předpokladu, že VB6 výchozí možnost báze).

Mnoho VB6 programátoři předpokládají, že pole je jedním bázi a nikdy používat přidělené arr(0). Můžeme odstranit potenciální zdroj chyb pomocí For i = 1 To UBound(arr)nebo For i = 0 To UBound(arr), protože pak je to jasné, zda arr(0)je používán.

For each vytvoří kopii každého prvku pole, spíše než ukazatel.

To má dva problémy.

  1. Když se snažíme přiřadit hodnotu prvku pole, to neodráží na originálu. Tento kód přiřazuje hodnotu 47 do proměnné i, ale nemá vliv na prvky arr.

    arr = Array (3,4,8)
    pro každého i v arr
         i = 47
    příště já
    Response.Write arr (0) ‚- vrací 3, ne 47

  2. Nevíme index prvku pole v režimu A for each, a my nejsou garantovány pořadí prvků (i když se zdá být v pořádku.)

Odpovězeno 23/09/2008 v 16:24
zdroj uživatelem

hlasů
3

LBound nemusí být vždy 0.

I když není možné vytvořit pole, které má něco jiného než 0 dolní mez v VBScript, je stále možné získat řadu variant z součást COM, která může mít určen jiný LBound.

To znamená, že jsem nikdy narazit na ten, který udělal něco podobného.

Odpovězeno 24/09/2008 v 19:24
zdroj uživatelem

hlasů
1

Vždycky jsem použít pro každý ...

Odpovězeno 12/08/2008 v 15:34
zdroj uživatelem

hlasů
1

Pravděpodobně pochází z VB6. Vzhledem k tomu, s Option Base prohlášení v VB6, můžete změnit dolní mez matice, jako je tento:

Option Base 1

Také v VB6, můžete změnit dolní mez specifické pole, jako je tento:

Dim myArray(4 To 42) As String
Odpovězeno 05/08/2008 v 15:24
zdroj uživatelem

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