有没有办法在红宝石之间生成一个随机数,例如1 - 100但不包括20,30和40?
我可以做类似
的事情def random_number
random_number = rand(100)
while random_number == 20 || 30 || 40
random_number = rand(100)
end
return random_number
end
...但这看起来效率不高(加上特定的例子可能甚至不起作用)。
有更简单的方法吗?任何帮助深表感谢!
答案 0 :(得分:19)
创建一个1到100的数组。从此数组中删除不需要的元素。然后从数组中选择一个随机数。
([*1..100] - [20, 30, 40]).sample
如果元素的数量很大,比如1000万,那么你随机选择一个并重试的方法,如果你发现了一个不需要的数字会更好。此外,如果不需要的数字列表很长,您可以将其放在数组或集合中,并测试成员资格而不是单独检查每个值。所以,而不是,
if(x == 20 || x == 30 || x == 40)
你可以做到,
unwanted_numbers = [20, 30, 40]
if(unwanted_numbers.include?(x))