Scala 随机洗牌列表并重复它



我想随机洗牌一个scala列表。

我知道我可以通过使用scala.util.Random.shuffle来做到这一点

但是在这里,通过调用它,我将始终获得一组新列表。我真正想要的是,在某些情况下,我希望随机播放始终为我提供相同的输出。那么我该如何才能实现这一目标呢?

基本上我想做的是首先随机洗牌列表,然后以相同的顺序重复它。我第一次想随机生成列表,然后根据某个参数重复相同的洗牌。

在洗牌之前使用 setSeed() 为生成器播种。然后,如果要重复洗牌,请重复使用种子。

例如:

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名->第2名

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

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)

让 a 成为种子参数 让 b 是你想洗牌的次数

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

您可以使用scala.util.Random.setSeed(a)其中"a"可以是任何整数,因此在完成洗牌 b 次后,您可以再次设置"a"种子,然后洗牌将与参数"a"的顺序相同

另一种方法是将 List(1,2,3,...a) == 1 to a b 次随机播放,将其保存为嵌套列表或向量,然后您可以将其映射到可迭代对象

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)))  

您可以通过映射来对要随机播放的其他列表使用相同的随机器

相关内容

  • 没有找到相关文章

最新更新