如何在Ruby中随机选择真/假w /权重

时间:2013-06-06 15:07:16

标签: ruby

我在下面创建了一个函数,随机选择truefalse,默认情况下每个函数的概率为50%。这个功能绝不是完美的。你会如何重构这种方法以使其更简洁?

def choose(weight = 50)
  bucket = []
  weight.times do
    bucket << true
  end
  while bucket.size < 100
    bucket << false
  end
  bucket.sample
end

3 个答案:

答案 0 :(得分:10)

以下实现更简洁,快速和类似ruby:

def choose(weight = 50)
  rand <= weight/100.0
end

答案 1 :(得分:3)

简单等效于您的功能(100个不连续的桶)

def choose(weight = 50) 
  rand(100) < weight
end

答案 2 :(得分:2)

如果您只需要这些值(true / false),则选择任意值会更容易一些。

def choose(weight = 50)
  chance = rand() # value between 0 and 1
  chance <= weight / 100.0
end

10.times.map{ choose(80)} # => [true, false, true, true, true, true, false, true, true, false]