4

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

在使用Scala For The Impatient时,我遇到了以下练习:

为 Java 循环编写等效的 Scala
       for (int i = 10; i >= 0; i--) System.out.println(i);

我很快就想出了以下解决方案:

   for (i <- 1 to 10 reverse) {
       println(i)
   }

然而,这让我想知道如何推断这样做的成本。reverse 方法是对 Range 进行 O(n) 遍历,还是用一些花哨的索引算术来装饰它?还有其他结构可以做得更好吗?

4

1 回答 1

18

您始终可以选择步骤:

for (i <- 10 to 1 by -1) {
       println(i)
}

根据您关于复杂性的问题。您也可以使用 reversed,因为在掩护下,新 Range将以相反的顺序创建(这是 O(1) 操作):

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

这是相当恒定的

于 2012-05-08T13:35:00.433 回答