Pergunta

Se você tem um loop, tais como:

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

Existe algum tipo de (oculto) iterator ou tenho de acrescentar um inteiro externo para manter a contagem:

Dim i As Integer
For Each s As String In stringList
    ..do stuff..
    i += 1
Next
Foi útil?

Solução

Não há escondido iterador, você teria que usar o código em seu segundo exemplo ou para trás revert a um loop for regular.

Outras dicas

A foreach não requer outro balcão. Ele itera através de cada corda em sua lista (assumindo StringList no seu exemplo é apenas o que parece :)). A menos que haja algum motivo você quer parar de fazer algo para cada corda em sua lista (isto é, apenas processar os primeiros 3 cordas). Essa seria a única razão para ter um contador dentro de seu loop foreach. Eu só reler o OP. A outra razão é saber quantas cordas você ter processado.

Espero que isso ajude! Theresa

Não há escondido iterador.

O i variável no seu exemplo é redundante.

PS:. Se você do necessidade i manter o controle de alguma coisa, eu inicialize-o antes de eu contar com ele

foreach loops são implementados usando um enumerador que mantém o controle da contagem. Se você quer saber quantas voltas você já passou por você precisa usar um loop for ou acompanhar a contagem de si mesmo.

A para-cada loop irá acompanhar o enumerador para você.

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

(Desculpe o abastardamento da VB e C #, eu sou um chaves tipo de cara - provavelmente melhor pensar nisso como pseudo-código)

O código acima saída seria

um

dois

três

se ele iria compilar. :)

Você definitivamente não precisa fornecer o seu próprio número inteiro externo.

Mesmo assim, não há escondido counter . Há um escondido recenseador . A diferença é que nem tudo o que pode ser iterado é acessível por índice. Algumas vezes você não pode obter o próximo item em uma seqüência até que você tenha calculado o item anterior. Então um enumerador pode usar uma máquina de estados que controla a sua posição atual e retorna o próximo item para cada iteração do loop, em vez de usar um contador.

Parte da magia de "For Each" é que você não precisa controlar o loop incrementor si mesmo. Ele é feito para você. Você pode ler a documentação referem-se a interface "IEnumerable" e dizer que deve implementar "GetEnumerator ()" o que é verdade. A função GetEnumerator () fornece essa magia.

Eu acho que está correto. Tenho certeza de que alguém vai me corrija se de outra forma.

A partir de uma visão de código elegante seria bom se o enumerador estava disponível com .primeira () e .last () métodos.

Versão Django 1.0.2 final, ...

Para enumerar:

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

Tente isto para aplicar uma 'regra' para o primeiro item em um loop:

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

Tente isto para excluir o último item:

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

... o último exemplo é ótimo para separados por vírgula listas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top