我如何将以下Java反向计数循环转换为Scala?

时间:2011-07-19 02:48:23

标签: scala

以下Java代码是一段非常简单的代码,但Scala中的等效构造是什么?

for (int i=10; i> 0; i-=2) {
    System.out.println(i);
}

3 个答案:

答案 0 :(得分:23)

答案取决于您是否还需要代码与Java中一样快。

如果您只是想让它起作用,您可以使用:

for (i <- 10 until 0 by -2) println(i);

(其中until表示省略最终条目to表示包含最终条目,就像您使用>一样或>=)。

但是,这会有一些适度的开销; for循环是Scala中比Java中更通用的构造,虽然它原则上可以优化,但实际上还没有(不是通过2.9的核心分发; ScalaCL插件可能会优化它)然而,对你而言。

对于println,打印将比循环更长 ,所以没关系。但是在一个紧密的循环中,你知道这是一个性能瓶颈,你需要使用while循环:

var i = 10
while (i > 0) {
  println(i)
  i -= 2
}

答案 1 :(得分:7)

要在Scala中以2为步长从10迭代到0(不包括),您可以使用untilby方法创建一个Range,然后在for循环中迭代它们:

for(i <- 10 until 0 by -2)

答案 2 :(得分:5)

当然你也可以这样做:

(0 to 4).map (10 - 2 * _)

List(10, 8, 6, 4, 2) foreach println

或者怎么样

(2 to 10 by 2).reverse
相关问题