1

我在下面创建了一个随机选择的函数,true或者false默认情况下每个函数都有 50% 的机会。这个功能绝不是完美的。您将如何重构此方法以使其更简洁?

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

3 回答 3

11

以下实现更简洁、快速且类似于 ruby​​:

def choose(weight = 50)
  rand <= weight/100.0
end
于 2013-06-06T15:11:17.037 回答
3

如果您只需要这些值 ( 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]
于 2013-06-06T15:10:40.803 回答
3

您的功能的简单等价物(100 个离散桶)

def choose(weight = 50) 
  rand(100) < weight
end
于 2013-06-06T16:01:37.940 回答