可能重复:
Scala 中减少 for 循环?
在研究 [Scala For The Impressive][1] 时,我遇到了以下练习:
为 Java 循环编写一个 Scala 等效项 for (int i = 10; i >= 0; i--) System.out.println(i);
我没花很长时间就想出了以下解决方案:
for (i <- 1 to 10 reverse) {
println(i)
}
然而,这让我想知道如何推断这样做的成本。相反的方法是否对 Range 进行 O(n) 遍历,或者是否用执行奇特索引算术的东西来装饰它?还有其他结构可以做得更好吗? [1]:http://horstmann.com/scala/
您始终可以选择步骤:
for (i <- 10 to 1 by -1) {
println(i)
}
根据你关于复杂性的问题。您也可以使用反转,因为在隐藏下,新的范围将以相反的顺序创建(这是 O(1) 操作):
final override def reverse: Range =
if (length > 0) new Range.Inclusive(last, start, -step)
else this
这是相当稳定的