填充列表是Scala,随机双重占用

use*_*486 5 performance scala list

我是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
Run Code Online (Sandbox Code Playgroud)

Ant*_*jdr 21

你也可以这样做:

List.fill(200000)(math.random)
Run Code Online (Sandbox Code Playgroud)

同样适用于例如Array ...

Array.fill(200000)(math.random)
Run Code Online (Sandbox Code Playgroud)

等......

  • @Malvolio:"Scalar?"怎么样?:) (2认同)
  • @Malvolio:我提名"Scalacious" (2认同)

dby*_*rne 9

您可以构建无限的随机双精度流:

def randomList(): Stream[Double] = Stream.cons(math.random, randomList)

val f = randomList().take(200000)
Run Code Online (Sandbox Code Playgroud)

这将利用延迟评估,因此在您实际需要之前不会计算值.即使评估所有200,000,也会很快.作为额外的奖励,f不再需要成为一个var.


Nic*_*tte 7

另一种可能性是:

val it = Iterator.continually(math.random)
it.take(200000).toList
Run Code Online (Sandbox Code Playgroud)

Streamcontinually如果你愿意,也有一种方法.


Dan*_*ral 5

首先,它没有比java更长的时间,因为没有java对应物.Java没有不可变列表.如果确实如此,表现将大致相同.

其次,由于附加列表具有线性性能,因此需要花费大量时间,因此整个事物具有二次性能.

而不是附加,前置,具有持续的性能.