【发布时间】:2011-07-15 07:29:06
【问题描述】:
我是 Scala 新手,正在尝试获取随机双精度值列表:
问题是,当我尝试运行它时,与它的 Java 对应物相比,它花费的时间太长了。关于为什么会这样的任何想法或关于更有效方法的建议?
def random: Double = java.lang.Math.random()
var f = List(0.0)
for (i <- 1 to 200000)
( f = f ::: List(random*100))
f = f.tail
【问题讨论】:
-
通过以这种方式使用 :::,您将在每次迭代时重建整个列表。理想情况下,您实际上会使用惰性数据结构,但如果您真的想要一个列表,请使用
f = (random * 100) :: f -
另外,以
var f: List[Double] = Nil开头 - 无需定义随机,只需导入即可:import java.lang.Math.random -
顺便说一句,
java.lang.Math.random()并不是特别随机的(参见:http://alife.co.uk/nonrandom/)。一个不错的选择(还有其他)是http://www.cs.gmu.edu/~sean/research/mersenne/MersenneTwisterFast.java。 -
还有一个
scala.util.Random,不用Java版的。 -
@Jesper:对。但仍应注意
scala.util.Random只是java.util.Random()的包装。
标签: performance list scala