Ruby on rails 从SecureRandom数字生成中排除数字

Ruby on rails 从SecureRandom数字生成中排除数字,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我们有一个随机数生成器,使用这个: SecureRandom.random_number(10) 这会给你一个从0到10的随机数 是否可以从中排除该号码?假设是8点 我在想这件事: [SecureRandom.random_number(10)].grep_v(8) 但可能有一种更正确、更优化的方法吗 Ruby 2.7.2 Rails 6.1.2您可以生成最多9个数字,而不是生成最多10个数字,如果结果为8或以上,则添加1: number = SecureRandom.random_nu

假设我们有一个随机数生成器,使用这个:

SecureRandom.random_number(10)
这会给你一个从0到10的随机数

是否可以从中排除该号码?假设是8点

我在想这件事:

[SecureRandom.random_number(10)].grep_v(8)
但可能有一种更正确、更优化的方法吗

Ruby 2.7.2


Rails 6.1.2

您可以生成最多9个数字,而不是生成最多10个数字,如果结果为8或以上,则添加1:

number = SecureRandom.random_number(9)
number += 1 if number >= 8
或者,您可以生成一个有效数字列表,并随机选择其中一个,例如通过:


如果
random\u number
返回
8
,您的方法将生成
[]
如果您知道需要多少uniq数,:
sample
接受一个参数:
(1..10)。到a.sample(3)
VALID_NUMBERS = [0, 1, 2, 3, 4, 5, 6, 7, 9]

number = VALID_NUMBERS.sample(random: SecureRandom)