Quelle est la meilleure façon de parcourir un tableau dans Classic Asp VBScript ?

Dans le code ci-dessous

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

Quel est l'intérêt de demander en utilisant LBound ? C'est sûrement toujours 0.

请先 登录 后评论

4 réponses

Chris Farmer

Pourquoi ne pas utiliser For Each ? De cette façon, vous n'avez pas besoin de vous soucier de ce que sont les LBound et UBound.

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

For Each y In x
    z = DoSomethingWith(y)
Next
请先 登录 后评论
James Marshall

J'ai toujours utilisé For Each...

请先 登录 后评论
xpda

Il y a une bonne raison de NE PAS UTILISER For i = LBound(arr) To UBound(arr)

dim arr(10) alloue onze membres du tableau, de 0 à 10 (en supposant la base d'options par défaut de VB6).

De nombreux programmeurs VB6 supposent que le tableau est basé sur un et n'utilisent jamais le arr(0) alloué. Nous pouvons supprimer une source potentielle de bogues en utilisant For i = 1 To UBound(arr) ou For i = 0 To UBound(arr), car il est alors clair si arr(0) est utilisé.

For each fait une copie de chaque élément du tableau, plutôt qu'un pointeur.

Cela pose deux problèmes.

  1. Lorsque nous essayons d'attribuer une valeur à un élément de tableau, cela ne reflète pas l'original. Ce code attribue une valeur de 47 à la variable i, mais n'affecte pas les éléments de arr.

    arr = Tableau(3,4,8)
    pour chaque i dans arr
         je = 47
    ensuite je
    Response.Write arr(0) '- renvoie 3, pas 47

  2. Nous ne connaissons pas l'index d'un élément de tableau dans un for each, et nous ne sommes pas garantis de la séquence des éléments (bien qu'elle semble être dans l'ordre.)

请先 登录 后评论
AnthonyWJones

LBound peut ne pas toujours être 0.

Bien qu'il ne soit pas possible de créer un tableau qui ait autre chose qu'une limite inférieure de 0 dans VBScript, il est toujours possible de récupérer un tableau de variantes à partir d'un composant COM qui peut avoir spécifié un 1 différent.

Cela dit, je n'en ai jamais rencontré qui ait fait quelque chose comme ça.

请先 登录 后评论