Scala 如何生成随机数列表?

Scala 如何生成随机数列表?,scala,Scala,这可能是史上最不重要的Scala问题,但它困扰着我。我如何生成一个n随机数的列表。到目前为止,我所拥有的: def n_rands(n : Int) = { val r = new scala.util.Random 1 to n map { _ => r.nextInt(100) } } 这很管用,但我觉得不是很像鳞片。我愿意接受建议 编辑 回想起来,这并不是因为它的相关性,而是因为它很有趣,很明显,以下内容看起来是可行的: 1 to 20 map r.nextInt 但是返回

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

def n_rands(n : Int) = {
 val r = new scala.util.Random
 1 to n map { _ => r.nextInt(100) } 
}
这很管用,但我觉得不是很像鳞片。我愿意接受建议

编辑

回想起来,这并不是因为它的相关性,而是因为它很有趣,很明显,以下内容看起来是可行的:

1 to 20 map r.nextInt
但是返回列表中每个条目的索引也是最后一个条目的上限。第一个数字必须小于1,第二个数字必须小于2,依此类推。我运行了三四次,发现“嗯,结果总是以0开头……”

怎么样:

import util.Random.nextInt
Stream.continually(nextInt(100)).take(10)
您可以使用或:

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

关于您的编辑

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


1到20映射(=>r.nextInt(100))
实现了您的预期。但是最好使用
Seq.fill
,因为它更准确地表示您正在做的事情。

也许这对其他人来说是显而易见的,但我需要做
val r=new util.Random;Stream.continuous(r.nextInt).take(10)
让代码正常工作。我写的是
Stream.continuous(r.nextInt(100)).take(10).toList
--可能不需要
.toList
,但
r.
不是。很抱歉,我已经按照@Nicholas的猜测导入了util.Random.nextInt。为了获得更多的实用程序,您可以从Stream.continuous(nextInt(100))中生成val。这对我非常有用,因为我可以通过Stream.distinct before take(n)对其进行过滤,以获得唯一的采样,这正是我所需要的。我需要为
nextInt
函数提供一个最大值。令人惊讶的是(至少对我来说)这是有效的:
Seq.fill(6)(Random.nextInt(100))
这并不奇怪,看看随机配对对象:我的意思是,我很惊讶它
Random.nextInt(100)
被解释为我想要的匿名函数,而不是我认为它看起来像的int值表达式。这是因为fill函数的第二个参数是“按名称”传递的(它的类型是
=>E
):
Random.nextInt(100)
为创建的每个值求值。
Seq.fill(5)(util.Random.nextInt)
@Jesper——五年后,我终于做了我应该做的第一件事。。。
Seq.fill(n)(Random.nextInt)