返回随机布尔值的最佳方法


103

我已经使用了一段时间,true或者false在构建伪种子数据时返回。只是想知道是否有人有更好,更简洁或冗长的方式来返回trueor false

rand(2) == 1 ? true : false

5
根据@ a'r的回答,您是否意识到rand(2)==1已经是布尔值?
Phrogz

Answers:


245

使用Array#sample的声明性代码段:

random_boolean = [true, false].sample

该死,我完全忘了我发布了这个问题。非常感谢您的紧急回答!
Chuck Bergeron

4
[true, false].samplerand(2) == 1。当我执行一千万次操作时,rand方法为2.179s。该sample方法为1.645s。
Mirror318 '16

[true,false] .sample不快于rand> 0.5
Ivan Castellanos

36

如何删除三元运算符。

rand(2) == 1

2
它更紧凑,但我更喜欢[true, false].sample它,因为它可以立即显而易见。rand(2) == 1可以在<1.9的ruby下工作,这很好。
Automatico

2
由于只有0and 1,您也可以使用rand(2).zero?
Stefan

15

我喜欢用 rand

rand < 0.5

编辑:该答案用于阅读,rand > 0.5rand < 0.5技术上更正确。rand会返回半开范围 [0,1)的结果,因此使用<导致半开范围[0,0.5)和[0.5,1)的几率相等的结果。使用>将导致闭合范围[0,0.5]和打开范围(.5,1)的不均等几率。


4
太棒了。样本方法产生(理论上)的概率为50%,但是您可以使用该方法调整该概率。说,我希望获得真实价值的机会是70%rand > 0.3
juliangonzalez

4
@JGonzalezD并使其更直接和可读性:rand < 0.770%
TNT

4

我通常使用这样的东西:

rand(2) > 0

您还可以扩展Integer来创建to_boolean方法:

class Integer
  def to_boolean
    !self.zero?
  end
end

在ruby中,只有false和nil是错误的,我强烈建议不要胡闹修补这种行为。
哈巴克斯'18年

更好的是,rand(2).zero?
Jesse Novotny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.