【发布时间】:2011-10-13 14:14:23
【问题描述】:
由于 Scala 没有带有索引的旧 Java 样式 for 循环,
// does not work
val xs = Array("first", "second", "third")
for (i=0; i<xs.length; i++) {
println("String #" + i + " is " + xs(i))
}
我们如何在不使用var 的情况下高效地进行迭代?
你可以这样做
val xs = Array("first", "second", "third")
val indexed = xs zipWithIndex
for (x <- indexed) println("String #" + x._2 + " is " + x._1)
但是列表被遍历了两次——效率不高。
【问题讨论】:
-
这些都是很好的回应。我从 Java 'for' 循环中缺少的是拥有多个初始化程序的能力,以及使用不仅仅是增量/减量来“迭代”的能力。这是 Java 比 Scala 更简洁的一个例子。
-
...“迭代”不仅仅使用增量/减量...在 scala 中,可以使用 step 进行迭代,或者在循环头中使用“if”条件进行迭代。或者您正在寻找其他东西?
-
/*Java*/ for(int i=0, j=0; i+j
-
@snappy :在我看来,最自然的 Scala 转换是
while循环。我记得,几年前曾有过一场争论,Scala 是否应该继承 Java 的for(;;)循环,最终决定这样做的好处不足以证明增加的复杂性是合理的。