【问题标题】:counting down in scala for loop [duplicate]在scala for循环中倒计时[重复]
【发布时间】:2012-05-08 13:33:36
【问题描述】:

可能重复:
Decreasing for loop in Scala?

在处理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) 遍历,还是用一些花哨的索引算法来装饰它?是否有其他结构可以更好地做到这一点?

【问题讨论】:

    标签: performance scala scala-2.9 reasoning


    【解决方案1】:

    你总是可以选择步骤:

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

    根据您关于复杂性的问题。你也可以使用 reversed,因为新 Range will be created 的顺序相反(它是 O(1) 操作):

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

    这是相当稳定的

    【讨论】:

    • 应该是“10 比 1 乘 -1”。我个人更喜欢“(10 to 1 by -1) foreach println”
    • @GerdRiesselmann 是的,感谢您的更正
    • 我尝试使用 by -1 而不是 reverse 进行此操作,但它没有产生任何输出,我认为这意味着它迭代零次。我想知道我做错了什么。
    • @pohl 正如 Gerd 所说,我们需要交换 1 和 10,以通过 -1 得到 10 到 1
    • 哎呀。是的,就是这样。谢谢。
    猜你喜欢
    • 2015-05-31
    • 2021-12-09
    • 1970-01-01
    • 2012-02-11
    • 2016-11-06
    • 2014-03-02
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多