Scala随机播放一个列表并重复它

时间:2017-05-30 07:20:53

标签: scala random shuffle

我想要随机播放一个scala列表。

我知道我可以使用scala.util.Random.shuffle

来完成此操作

但是在这里通过调用这个我将永远得到一个新的列表。我真正想要的是,在某些情况下,我希望shuffle总是给我相同的输出。那我怎么能实现呢?

基本上我想做的是首先随机地随机播放列表,然后以相同的顺序重复它。我第一次想要随机生成列表,然后根据一些参数重复相同的改组。

2 个答案:

答案 0 :(得分:3)

在改组之前使用setSeed()为生成器播种。然后,如果你想重复一个shuffle重用种子。

例如:

scala> util.Random.setSeed(41L)  // some seed chosen for no particular reason

scala> util.Random.shuffle(Seq(1,2,3,4))
res0: Seq[Int] = List(2, 4, 1, 3)

那洗牌:第1名 - >第3,第2 - >第1,第3 - >第4,第4 - >第二

现在我们可以重复相同的随机播放模式。

scala> util.Random.setSeed(41L)  // same seed

scala> util.Random.shuffle(Seq(2,4,1,3))  // result of previous shuffle
res1: Seq[Int] = List(4, 3, 2, 1)

答案 1 :(得分:1)

设a为种子参数 设b是你想要洗牌多少次

有两种方法可以做到这一点

你可以使用scala.util.Random.setSeed(a)其中'a'可以是任何整数,所以在你洗牌完b次之后你可以再次设置'a'种子,然后你的改组将与你的参数的顺序相同'一个“

另一种方法是将List(1,2,3,...a) == 1 to a次洗牌保存为嵌套列表或向量,然后将其映射到可迭代的

val arr = List(Bob, Knight, John)
val randomer = (0 to b).map(x => scala.util.Random.shuffle((0 to arr.size))

randomer.map(x => x.map(y => arr(y)))  

你可以使用相同的randomer为你想要通过映射来改组的其他列表