1

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

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

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  

但是,这段代码很丑陋,我也肯定效率不高。
我将不胜感激任何优化我的代码的答案,提供更好的代码示例或将我推荐给执行此类操作的 gem(如果存在的话)。

提前致谢。

4

2 回答 2

3

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

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

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

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

于 2013-09-10T18:46:40.453 回答
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
于 2013-09-10T20:25:43.313 回答