如果你有一个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
有帮助吗?

解决方案

没有隐藏的迭代器,你必须使用第二个例子中的代码或者恢复到循环的常规

其他提示

foreach不需要另一个计数器。它遍历列表中的每个字符串(假设您的示例中的stringList就是它听起来像:))。除非有某种原因你想停止对列表中的每个字符串做一些事情(即只处理前3个字符串)。这将是你的foreach循环中有一个计数器的唯一原因。我只是重读了OP。另一个原因是要知道你处理了多少个字符串。

希望这有帮助! 颖

没有隐藏的迭代器。

示例中的变量 i 是多余的。

PS:如果 需要 i 来跟踪某些内容,我会在依赖它之前对其进行初始化。

使用枚举器实现foreach循环,该枚举器跟踪计数。如果你想知道你经历了多少循环,你需要使用for循环或自己跟踪计数。

for-each循环将为您跟踪枚举器。

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

(抱歉VB和C#的混蛋,我是一个大括号的人 - 可能最好把它想象成伪代码)

上面的代码会输出

  

一个

     

2

     

3

如果它会编译。 :)

您绝对不需要提供自己的外部整数。

即便如此,也没有隐藏的计数器。有一个隐藏的枚举器。不同之处在于,索引无法访问所有可迭代的内容。有些时候,在计算上一个项目之前,您无法获得序列中的下一个项目。因此,枚举器可以使用跟踪当前位置的状态机,并为循环的每次迭代返回下一个项目,而不是使用计数器。

“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 %}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top