在Ruby上随机做出决定

时间:2013-09-10 18:41:48

标签: ruby random

我需要编写代码,根据随机生成的数字在多个选项之间进行选择。

例如,以下(Ruby 1.9.3)代码根据rand()结果确定用户将赢得3个分区中的哪个分区,这是我想要实现的目标:

n = 3
rnd1 = rand()
if (0 <= rnd1) and (rnd1 < 1 * 1.0 / n)
  puts "Won first bin"
elsif (1 * 1.0 / n <= rnd1) and (rnd1 <= 2 * 1.0 / n)
  puts "Won second bin)
else
  puts "Won third bin"
end  

然而,这段代码很丑陋,而且我肯定也没有效率。
我很感激任何答案优化我的代码,给出一个更好的代码示例或引用我做一个做这样的事情的宝石(如果存在)。

提前致谢。

2 个答案:

答案 0 :(得分:3)

最简单的Ruby表达式可能是Array#sample方法:

[ 'Bin 1', 'Bin 2', 'Bin 3' ].sample
# => e.g. 'Bin 3'

它有额外的语法,一次选择多个项目。

它没有提供加权选择的机制。如果您需要某个随机源,它不接受预先计算的随机数的输入。您不是在问这些问题,但很明显您的示例代码不是您的最终目标。

答案 1 :(得分:1)

Kernel#rand使用可选参数指定范围或最大值:

case rand(1..3)
when 1
  puts "Won first bin"
when 2
  puts "Won second bin"
when 3
  puts "Won third bin"
end