生成X和Y之间的随机数,不包括某些数字

时间:2011-08-07 02:46:40

标签: ruby random

有没有办法在红宝石之间生成一个随机数,例如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

...但这看起来效率不高(加上特定的例子可能甚至不起作用)。

有更简单的方法吗?任何帮助深表感谢!

1 个答案:

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