安全地循环随机唯一号

时间:2018-10-16 07:29:16

标签: ruby-on-rails ruby-on-rails-5

我有一个循环,可以按用户输入的一定数量的组添加数字。

no_reps = @trial.number_of_repetitions

我正在寻找在no_reps变量组中的一个和no_reps变量之间输入一个随机数。

当前r.treatment_index = SecureRandom.random_number(1..no_reps)的编号没有唯一性。值与范围匹配,但并非每个in_groups_of唯一。

@trial.repetitions.in_groups_of(no_reps).each_with_index do |a, i|
  a.each do |r|
   r.repetition_index = i + 1
   r.treatment_index = SecureRandom.random_number(1..no_reps)
  end
end

1 个答案:

答案 0 :(得分:3)

尝试#shuffle预先填充的数组:

@trial.repetitions.in_groups_of(no_reps).each_with_index do |a, i|
  treatment_indexes = (1..no_reps).to_a.shuffle
  a.each_with_index do |r, j|
   r.repetition_index = i + 1
   r.treatment_index = treatment_indexes[j]
  end
end

UPD::如果您注意速度:

treatment_indexes = (1..no_reps).to_a
@trial.repetitions.in_groups_of(no_reps).each_with_index do |a, i|
  treatment_indexes.shuffle!
  ...