Question

Si vous avez une boucle for telle que:

For Each s As String In stringList
    ..do stuff..
Next

Existe-t-il une sorte d'itérateur (masqué) ou dois-je ajouter un entier externe pour que le nombre de comptes soit maintenu:

Dim i As Integer
For Each s As String In stringList
    ..do stuff..
    i += 1
Next
Était-ce utile?

La solution

Il n'y a pas d'itérateur masqué, vous devez utiliser le code de votre deuxième exemple ou revenir à une boucle classique pour .

Autres conseils

Un foreach n’a pas besoin d’un autre compteur. Il effectue une itération sur chaque chaîne de votre liste (en supposant que chaîneListe dans votre exemple est exactement ce que cela ressemble :)). Sauf si vous avez une raison quelconque de ne pas vouloir modifier chaque chaîne de votre liste (par exemple, ne traitez que les 3 premières chaînes). Ce serait la seule raison d'avoir un compteur dans votre boucle foreach. Je viens de relire l'OP. L'autre raison est de savoir combien de chaînes vous avez traitées.

J'espère que ça aide! Thérèse

Il n'y a pas d'itérateur caché.

La variable i de votre exemple est redondante.

PS: Si vous avez besoin de i pour garder trace de quelque chose, je l'initialisais avant de m'y fier.

Les boucles foreach sont mises en oeuvre à l'aide d'un énumérateur qui enregistre le nombre. Si vous voulez savoir combien de boucles vous avez parcourues, vous devez utiliser une boucle for ou garder une trace du nombre vous-même.

Une boucle for-each gardera une trace de l'énumérateur pour vous.

ForEach s As String In new string[] {"one","two","three"}
    Console.WriteLine(s);
Next

(Désolé pour la bastardisation de VB et C #, je suis un gars du genre accolés - il est probablement préférable de le considérer comme un pseudo-code)

Le code ci-dessus serait généré

  

un

     

deux

     

trois

si cela compilerait. :)

Vous n'avez certainement pas besoin de fournir votre propre entier externe.

Même dans ce cas, il n'y a pas de compteur caché . Il existe un énumérateur caché. La différence est que tout ce qui peut être itéré n'est pas accessible par index. Parfois, vous ne pouvez pas obtenir l'élément suivant d'une séquence tant que vous n'avez pas calculé l'élément précédent. Ainsi, un énumérateur peut utiliser une machine à états qui suit votre position actuelle et renvoie l'élément suivant pour chaque itération de la boucle, plutôt que d'utiliser un compteur.

Une partie de la magie de " For Each " c'est que vous n'avez pas besoin de suivre l'incrémenteur de boucle vous-même. C'est fait pour vous. Vous pouvez lire la documentation en vous reportant à l’interface " IEnumerable " et dire qu'il doit implémenter & Get; Numérateur () " ce qui est vrai. La fonction GetEnumerator () fournit cette magie.

Je pense que c'est correct. Je suis sûr que quelqu'un me corrigera sinon.

Dans une vue de code élégante, il serait bien que l'énumérateur soit disponible avec les méthodes .First () et .Last ().

Django version 1.0.2 finale ...

Pour énumérer:

{% for item in items %}
    <li>{{ forloop.counter }}) {{ item }}</li>
{% endfor %}

Essayez d'appliquer une "règle" au premier élément d'une boucle:

    {% if forloop.first %}Starting the loop{% endif %}

Essayez ceci pour exclure le dernier élément:

    {% if not forloop.last %}, {% endif %}

... le dernier exemple convient parfaitement aux listes séparées par des virgules.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top