如何生成随机数列表?

Mal*_*lio 55 scala

这可能是史上最不重要的Scala问题,但这让我感到困扰.我如何生成n个随机数列表.到目前为止我所拥有的:

def n_rands(n : Int) = {
 val r = new scala.util.Random
 1 to n map { _ => r.nextInt(100) } 
}
Run Code Online (Sandbox Code Playgroud)

哪个有效,但对我来说看起来不太明显.我愿意接受建议.

编辑

并不是因为它的相关性非常重要而且回想起来很明显,以下看起来很有效:

1 to 20 map r.nextInt
Run Code Online (Sandbox Code Playgroud)

但是返回列表中每个条目的索引也是最后一个条目的上限.第一个数字必须小于1,第二个数字必须小于2,依此类推.我跑了三四次,注意到"嗯,结果总是从0开始..."

Nic*_*las 92

您可以使用Don的解决方案或:

Seq.fill(n)(Random.nextInt)
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要创建新Random对象,您可以使用默认伴随对象Random,如上所述.

  • 这是因为fill函数的第二个参数是"按名称"传递的(它的类型是`=> E`):对每个创建的值计算`Random.nextInt(100)`. (8认同)

Don*_*zie 35

怎么样:

import util.Random.nextInt
Stream.continually(nextInt(100)).take(10)
Run Code Online (Sandbox Code Playgroud)

  • 也许对其他人来说这是显而易见的,但我需要做`val r = new util.Random; Stream.continually(r.nextInt).take(10)`让代码工作. (3认同)

Lui*_*hys 5

关于你的编辑,

nextInt可以将Int参数作为随机数的上限,因此1 to 20 map r.nextInt是相同的1 to 20 map (i => r.nextInt(i)),而不是更有用的编译错误.

1 to 20 map (_ => r.nextInt(100))做你想要的.但它最好使用,Seq.fill因为它更准确地代表你正在做的事情.