在scala for循环中倒计时

poh*_*ohl 3 performance scala reasoning scala-2.9

可能重复:
减少Scala中的循环?

在通过Scala For The Impatient进行工作时,我接受了以下练习:

Write a Scala equivalent for the Java loop
       for (int i = 10; i >= 0; i--) System.out.println(i);

我花了很长时间才提出以下解决方案:

   for (i <- 1 to 10 reverse) {
       println(i)
   }
Run Code Online (Sandbox Code Playgroud)

然而,这让我想知道如何推断这样做的成本.反向方法是否进行了范围的O(n)遍历,还是用一些花式索引算法来装饰它?还有其他结构可以做得更好吗?

om-*_*nom 18

你总是可以选择步骤:

for (i <- 10 to 1 by -1) {
       println(i)
}
Run Code Online (Sandbox Code Playgroud)

根据你关于复杂性的问题.你也可以使用反转,因为在覆盖范围新的范围将以反向顺序创建(它是O(1)操作):

final override def reverse: Range =
    if (length > 0) new Range.Inclusive(last, start, -step)
    else this
Run Code Online (Sandbox Code Playgroud)

这是非常不变的

  • 应该是"10比1乘-1".我个人喜欢"(10比1比-1)foreach println"更好 (4认同)