Domanda

Se hai un ciclo for come:

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

esiste una sorta di iteratore (nascosto) o devo aggiungere un numero intero esterno per tenere il conto:

Dim i As Integer
For Each s As String In stringList
    ..do stuff..
    i += 1
Next
È stato utile?

Soluzione

Non esiste un iteratore nascosto, dovresti usare il codice nel tuo secondo esempio o ripristinare un normale ciclo per .

Altri suggerimenti

Una foreach non richiede un altro contatore. Esegue l'iterazione di ogni stringa nell'elenco (supponendo che stringList nell'esempio sia proprio quello che sembra :)). A meno che non ci sia qualche motivo per cui vuoi smettere di fare qualcosa per ogni stringa nel tuo elenco (cioè elaborare solo le prime 3 stringhe). Sarebbe l'unica ragione per avere un segnalino all'interno del tuo ciclo foreach. Ho appena riletto l'OP. L'altro motivo è sapere quante stringhe hai elaborato.

Spero che questo aiuti! Theresa

Non esiste un iteratore nascosto.

La variabile i nel tuo esempio è ridondante.

PS: se devi hai bisogno di i per tenere traccia di qualcosa, lo inizializzerei prima di fare affidamento su di esso.

I foreach loop sono implementati usando un Enumeratore che tiene traccia del conteggio. Se vuoi sapere quanti loop hai passato, devi utilizzare un ciclo for o tenere traccia del conteggio da solo.

Un ciclo for-each terrà traccia dell'enumeratore per te.

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

(Mi dispiace per la bastardizzazione di VB e C #, sono un tipo di parentesi graffe - probabilmente è meglio pensarlo come uno pseudo-codice)

L'output del codice sopra riportato

  

una

     

due

     

tre

se si compilasse. :)

Sicuramente non è necessario fornire il proprio numero intero esterno.

Anche così, non esiste un contatore nascosto. C'è un enumeratore nascosto . La differenza è che non tutto ciò che può essere iterato è accessibile per indice. Alcune volte non è possibile ottenere l'elemento successivo in una sequenza fino a quando non si è calcolato l'elemento precedente. Quindi un enumeratore può utilizzare una macchina a stati che tiene traccia della posizione corrente e restituisce l'elemento successivo per ogni iterazione del ciclo, anziché utilizzare un contatore.

Parte della magia di " Per ciascuno " è che non è necessario tenere traccia dell'incremento del loop da soli. È fatto per te. È possibile leggere la documentazione fare riferimento all'interfaccia "IEnumerable" e dire che deve implementare " GetEnumerator () " che è vero. La funzione GetEnumerator () fornisce questa magia.

Penso che sia corretto. Sono sicuro che qualcuno mi correggerà se diversamente.

Da un'elegante vista del codice sarebbe bello se l'enumeratore fosse disponibile con i metodi .First () e .Last ().

Django versione 1.0.2 final ...

Per elencare:

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

Prova questo per applicare una 'regola' al primo elemento in un ciclo:

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

Prova questo per escludere l'ultimo elemento:

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

... l'ultimo esempio è ottimo per gli elenchi separati da virgole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top