最近,我开始在Scala中编写很多编程竞赛的代码。(您可以在此处查看平台-http: //codeforces.com/)
关于问题的性质,我经常需要遍历数组或输入数据。例如,有一个问题说明,它说,在第一个输入行上,我将得到数字M,然后需要读取M行,或者整数或其他内容。我尝试使用不同的方法:
for (i <- 0 until M)
----
(0 until M).foreach
----
var i = 0
while (i < M)
---
甚至尾递归
@tailrec
def recursion(i: Int): Unit = {
if (i < M) {
doSomething()
recursion(i + 1)
}
}
因此,我的问题是,关于Scala风格,哪种结构更适合使用并获得更好的性能?(我要解决的问题通常需要快速执行,否则将无法通过)
PS我为此编写了一个小型测试,看起来虽然while和tailrec的性能最佳,但并不是一件大事。您可以在这里查看-https://gist.github.com/MysterionRise/5daa63fdbd5d058528fe
关于性能:
请注意,如果您想在JVM上编写适当的微基准测试,则必须考虑许多影响-例如,当JVM开始使用JIT编译时,同一段代码的性能起初会有所不同,然后尝试不同优化。要在Scala中编写适当的基准,您可以查看例如ScalaMeter或caliper之类的库。顺便说一句,第二个链接比较了Scala中循环的不同方式,因此应该很容易适应您的用例。
但是,一般来说:
关于样式:
我完全同意johanandren的回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句