Scala 不重复地从一组数字中选择随机数

Scala 不重复地从一组数字中选择随机数,scala,Scala,我想从0…N-1中选择X数字,这样所选的数字就不会重复。我知道 val rand_pos = Seq.fill(X)(Random.nextInt(N)) 生成重复的随机数。有没有优雅的方法可以不重复地获取所需的选定数字?如果N不是太大,您可以使用scala.util.Random.shuffle创建0..N-1的排列,然后获取X个元素: scala.util.Random.shuffle(Range(0,N).toList).take(X) 这里有多少可以被视为“大”@这当然取决于您的应用

我想从
0…N-1
中选择
X
数字,这样所选的数字就不会重复。我知道

val rand_pos = Seq.fill(X)(Random.nextInt(N))

生成重复的随机数。有没有优雅的方法可以不重复地获取所需的选定数字?

如果N不是太大,您可以使用
scala.util.Random.shuffle
创建0..N-1的排列,然后获取X个元素:

scala.util.Random.shuffle(Range(0,N).toList).take(X)

这里有多少可以被视为“大”@这当然取决于您的应用程序需求<代码>范围。toList将创建一个包含N个元素的列表,
洗牌将创建另一个相同大小的列表。例如,对于N=10^6,这样的列表将需要4MB。如果您只需要一次,这可能没问题,但如果您重复这样做,可能会太多。