从数组中选择唯一的随机数

b是我想要的最大赢家。

 b.times do winner = participant[rand(participant.count)] end 

我每次都需要产生一个独特的赢家。 如何在不对此代码进行太多更改的情况下实现此目的?

已经有了一种方法。 只需使用Array#sample

 winners = participants.sample(b) 

您可以使用Array#delete_at删除指定索引处的项目并返回已删除的项目。 我们现在可以确保一旦被选中的项目将永远不会被选中

 # sample data participant = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] b = 3 # preserve the original array p = participant.dup # pick winner b.times do winner = p.delete_at(rand(participant.count)) end 

如果您的程序可以一次性获得所有获胜者,您可以使用Array#sample (如建议的ndn )