Frage

Wenn Sie ein for-Schleife wie:

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

gibt es irgendeine Art von (versteckten) Iterator oder muss ich eine externe ganze Zahl hinzuzufügen Zahl zu halten:

Dim i As Integer
For Each s As String In stringList
    ..do stuff..
    i += 1
Next
War es hilfreich?

Lösung

Es gibt keinen versteckten Iterator, würden Sie den Code in Ihrem zweiten Beispiel oder wieder zurück zu einer normalen for Schleife verwenden.

Andere Tipps

Ein foreach erfordert nicht einen weiteren Zähler. Es ging durch jede Zeichenfolge in der Liste (String in Ihrem Beispiel unter der Annahme, genau das, was es klingt wie :)). Es sei denn, es aus irgendeinem Grund ist, dass Sie etwas zu tun, zu jeder Zeichenfolge in Ihrer Liste stoppen wollen (d verarbeiten nur die ersten drei Saiten). Das wäre der einzige Grund, einen Zähler in Ihrer foreach-Schleife zu haben. Ich las gerade die OP. Der andere Grund ist, zu wissen, wie viele Strings Sie bearbeitet haben.

Hope, das hilft! Theresa

Es gibt keine versteckten Iterator.

Die Variable i in Ihrem Beispiel ist überflüssig.

PS: Wenn Sie tun müssen i Spur von etwas zu halten, würde ich es initialisieren, bevor ich auf sie verlassen würde

.

foreach-Schleifen werden mit einem Enumerator implementiert, die Spur der Zählung hält. Wenn Sie wissen wollen, wie viele Schleifen haben Sie durchlaufen Sie eine for-Schleife verwenden müssen oder zu verfolgen, die sich rechnen.

A for-each-Schleife Spur des Enumerators zu halten für Sie.

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

(Sorry über die bastardisation von VB und C #, bin ich eine geschweiften Klammern Art von Typ - wahrscheinlich am besten davon als Pseudo-Code zu denken)

Der obige Code ausgeben würde

  

ein

     

zwei

     

drei

Wenn es kompilieren würde. :)

Sie auf jeden Fall brauchen Sie nicht Ihre eigene externe integer zu liefern.

Auch so gibt es keine versteckten Zähler . Es gibt eine versteckte enumerator . Der Unterschied besteht darin, dass nicht alles, was durchlaufen werden kann durch den Index zugänglich ist. Manchmal möchte man nicht das nächste Element in einer Sequenz erhalten, bis Sie den vorherigen Punkt berechnet haben. So kann ein Enumerator eine Zustandsmaschine, die Ihre aktuelle Position verfolgt und gibt den nächsten Punkt für jede Iteration der Schleife, anstatt unter Verwendung eines Zählers.

Ein Teil der Magie von „For Each“ ist, dass Sie benötigen, um Inkrementierer sich die Schleife nicht zu verfolgen. Es ist für Sie erledigt. Sie können Dokumentation beziehen sich auf die Schnittstelle „IEnumerable“ lesen und sagen, es muss „GetEnumerator ()“ implementieren, die wahr ist. Die GetEnumerator () Funktion stellt diese Magie.

Ich denke, das ist richtig. Ich bin sicher, dass jemand mich, wenn sonst korrigiert.

Von einer eleganten Code-Ansicht wäre es schön, wenn der Enumerator mit .First verfügbar ist () und .Last () Methoden.

Django Version 1.0.2 final ...

aufzuzählen:

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

Versuchen Sie, diese eine ‚Regel‘ auf das erste Element in einer Schleife gelten:

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

Versuchen Sie das letzte Element ausschließen:

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

... das letzte Beispiel ist für Komma getrennten Listen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top