Qual é a melhor maneira para percorrer um array em ASP clássico VBScript?

votos
31

No código abaixo

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

Qual é o ponto em pedir usando LBound? Certamente que é sempre 0.

Publicado 05/08/2008 em 15:07
fonte usuário
Em outras línguas...                            


5 respostas

votos
45

Por que não usar For Each? Dessa forma, você não precisa se importar com o que o LBounde UBoundsão.

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

For Each y In x
    z = DoSomethingWith(y)
Next
Respondeu 05/08/2008 em 15:36
fonte usuário

votos
16

Há uma boa razão para NÃO USEFor i = LBound(arr) To UBound(arr)

dim arr(10) aloca onze membros da matriz, 0 até 10 (assumindo a VB6 Base de Dados de Opção padrão).

Muitos programadores VB6 assumir a matriz é baseada em um, e nunca usar a alocado arr(0). Nós podemos remover uma fonte potencial de erros usando For i = 1 To UBound(arr)ou For i = 0 To UBound(arr), porque então é claro se arr(0)está sendo usado.

For each faz uma cópia de cada elemento da matriz, em vez de um ponteiro.

Isto tem dois problemas.

  1. Quando tentamos atribuir um valor a um elemento da matriz, não refletir sobre originais. Este código atribui um valor de 47 para a variável i, mas não afeta os elementos arr.

    arr = Array (3,4,8)
    para cada i na arr
         i = 47
    proximo eu
    Response.Write arr (0) '- retorna 3, não 47

  2. Nós não sabemos o índice de um elemento de matriz em um for each, e nós não são garantidos a sequência de elementos (embora parece estar em ordem.)

Respondeu 23/09/2008 em 16:24
fonte usuário

votos
3

LBound pode não ser sempre 0.

Embora não seja possível criar uma matriz que tem outra coisa senão um 0 Limite inferior em VBScript, ainda é possível recuperar uma matriz de variantes de um componente COM que pode ter especificado um diferente LBound.

Que disse que eu nunca me deparei com um que tenha feito nada parecido.

Respondeu 24/09/2008 em 19:24
fonte usuário

votos
1

Eu sempre usado para cada ...

Respondeu 12/08/2008 em 15:34
fonte usuário

votos
1

Provavelmente se trata de VB6. Porque com Option Base declaração em VB6, você pode alterar o limite inferior de matrizes como este:

Option Base 1

Também em VB6, você pode alterar o limite inferior de uma matriz específica como esta:

Dim myArray(4 To 42) As String
Respondeu 05/08/2008 em 15:24
fonte usuário

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