。包括?在不使用Ruby的if语句中

时间:2014-01-28 21:03:50

标签: ruby arrays random while-loop

我正在尝试使用0到4之间的唯一随机数填充ruby中的数组。我正在尝试在a.include上使用if语句?但它不起作用。任何人都可以帮助我理解为什么声明if numbers.include?(new_array_num) == false似乎不起作用?此外,我正在努力使这项工作没有.shuffle方法。谢谢!

num = 5
counter = 5
numbers = []

while counter >= 0 
    new_array_num = rand(num)
    if numbers.include?(new_array_num) == false
        numbers.push new_array_num
        counter -= 1
    end
end

3 个答案:

答案 0 :(得分:2)

rand(num)正在给你一个0-4的结果。这是5个值:0,1,2,3,4。你试图将值放在计数器值5,4,3,2,1,0。 rand没有足够的值来使其工作。试试counter > 0或者更好的是:

[0,1,2,3,4].shuffle
# => [3, 2, 4, 0, 1]

答案 1 :(得分:2)

while counter >= 0 

需要

while counter > 0 

你的循环中充满了范围内的每个可能的随机数,而你又要求它一个,所以循环永远不会结束。

如果您的目的是生成1到x之间所有数字的随机排序数组,请使用(1..x).to_a.shuffle

答案 2 :(得分:0)

我可以建议:

num = 5
counter = 5
numbers = []

while numbers.count < counter
  random = rand(num)
  numbers << random unless numbers.include?(random)
end

puts numbers

更新

我喜欢使用shuffle的想法,如果你想要它是动态的,你可以使用:

n = 5
(0..n).to_a.shuffle
# => [2, 1, 4, 0, 5]