这个for循环中是否有一个隐藏的迭代计数器?

时间:2009-01-05 14:02:46

标签: vb.net for-loop

如果你有一个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

9 个答案:

答案 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 %}

...最后一个例子非常适合以逗号分隔的列表。