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