如果您有一个 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
循环。
foreach 不需要另一个计数器。它遍历列表中的每个字符串(假设您的示例中的 stringList 就是它听起来的样子:))。除非出于某种原因您想停止对列表中的每个字符串执行某些操作(即仅处理前 3 个字符串)。这将是在你的 foreach 循环中有一个计数器的唯一原因。我只是重读了OP。另一个原因是要知道你处理了多少个字符串。
希望这可以帮助!有个
for-each 循环将为您跟踪枚举数。
ForEach s As String In new string[] {"one","two","three"}
Console.WriteLine(s);
Next
(对于 VB 和 C# 的混蛋,我很抱歉,我是一个花括号类型的人 - 可能最好将其视为伪代码)
上面的代码将输出
一
二
三
如果它会编译。:)
没有隐藏的迭代器。
您示例中的变量i
是多余的。
PS:如果您确实需要i
跟踪某些内容,我会在依赖它之前对其进行初始化。
您绝对不需要提供自己的外部整数。
即便如此,也没有隐藏的柜台。有一个隐藏的枚举器。不同之处在于并非所有可以迭代的东西都可以通过索引访问。有时,在计算前一项之前,您无法获得序列中的下一项。因此,枚举器可以使用状态机来跟踪您的当前位置并为循环的每次迭代返回下一项,而不是使用计数器。
foreach 循环是使用一个跟踪计数的 Enumerator 实现的。如果你想知道你经历了多少循环,你需要使用 for 循环或自己跟踪计数。
“For Each”的部分魔力在于您不需要自己跟踪循环增量器。它已经为你完成了。您可以阅读文档,参考接口“IEnumerable”并说它必须实现“GetEnumerator()”,这是真的。GetEnumerator() 函数提供了这种魔力。
我认为这是正确的。如果不是这样,我相信有人会纠正我。
从优雅的代码视图来看,如果枚举器可用于 .First() 和 .Last() 方法,那就太好了。
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 %}
...最后一个示例非常适合逗号分隔的列表。