以下Java代码是一段非常简单的代码,但Scala中的等效构造是什么?
for (int i=10; i> 0; i-=2) {
System.out.println(i);
}
答案 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(不包括),您可以使用until
和by
方法创建一个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