我需要编写代码,根据随机生成的数字在多个选项之间进行选择。
例如,以下(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
然而,这段代码很丑陋,而且我肯定也没有效率。
我很感激任何答案优化我的代码,给出一个更好的代码示例或引用我做一个做这样的事情的宝石(如果存在)。
提前致谢。
答案 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