次のようなforループがある場合:
For Each s As String In stringList
..do stuff..
Next
ある種の(隠された)イテレータがありますか、それともカウントを維持するために外部整数を追加する必要がありますか?
Dim i As Integer
For Each s As String In stringList
..do stuff..
i += 1
Next
for
非表示の反復子はありません。2 番目の例のコードを使用するか、通常のループに戻す必要があります。
foreach は別のカウンターを必要としません。リスト内の各文字列を反復処理します(例の stringList がまさにそのように聞こえると仮定します:))。リスト内の各文字列に対して何かを行うのをやめたい何らかの理由がない限り (つまり、最初の 3 つの文字列のみを処理します)。これが、foreach ループ内にカウンターを配置する唯一の理由です。OPだけ読み返しました。もう 1 つの理由は、処理した文字列の数を知ることです。
お役に立てれば!あります
洗練されたコード ビューから、列挙子が .First() および .Last() メソッドで使用できると便利です。
for-each ループは、列挙子を追跡します。
ForEach s As String In new string[] {"one","two","three"}
Console.WriteLine(s);
Next
(VB と C# のろくでなし化については申し訳ありません。私は中かっこのような男です - おそらく疑似コードと考えるのが最善です)
上記のコードは出力します
1
2
三
コンパイルされる場合。:)
非表示の反復子はありません。
あなたの例の変数i
は冗長です。
PS:何かを追跡する必要がある場合は、依存する前に初期化します。i
独自の外部整数を提供する必要はまったくありません。
それにしても隠しカウンターはない。非表示の列挙子があります。違いは、反復可能なすべてのものにインデックスでアクセスできるわけではないということです。前のアイテムを計算するまで、シーケンス内の次のアイテムを取得できない場合があります。したがって、列挙子は、カウンターを使用するのではなく、現在の位置を追跡し、ループの反復ごとに次の項目を返すステート マシンを使用する場合があります。
foreach ループは、カウントを追跡する Enumerator を使用して実装されます。通過したループの数を知りたい場合は、for ループを使用するか、自分でカウントを追跡する必要があります。
「For Each」の魔法の 1 つは、ループ インクリメンターを自分で追跡する必要がないことです。それはあなたのために行われます。インターフェース「IEnumerable」を参照するドキュメントを読んで、真の「GetEnumerator()」を実装する必要があると言うかもしれません。GetEnumerator() 関数は、この魔法を提供します。
それは正しいと思います。そうでなければ、誰かが私を修正すると確信しています。
Djangoバージョン1.0.2ファイナル..。
列挙するには:
{% for item in items %}
<li>{{ forloop.counter }}) {{ item }}</li>
{% endfor %}
これを試して、ループの最初の項目に「ルール」を適用します。
{% if forloop.first %}Starting the loop{% endif %}
最後のアイテムを除外するには、これを試してください。
{% if not forloop.last %}, {% endif %}
...最後の例は、コンマ区切りのリストに最適です。