2011-11-04 76 views
88

我在構建假種子數據時,一直在使用這一段時間返回truefalse。只是想知道是否有人有更好,更簡潔或詳細的方式返回truefalse返回一個隨機布爾值的最佳方法

rand(2) == 1 ? true : false 
+5

根據@ a'r的回答,你是否意識到rand(2)== 1'已經是一個布爾值? – Phrogz

回答

217

使用Array#sample聲明性片段:

random_boolean = [true, false].sample 
+0

該死的,我完全忘了我發佈了這個問題。非常感謝你的答案! –

+4

**'[true,false] .sample'比'rand(2)== 1'快**。當我執行每個操作* 1000萬次時,「rand」方法是2.179s。 「樣本」方法是1.645s。 – Mirror318

+0

[true,false] .sample不比rand快0.5 –

30

如何去除三元運算符。

rand(2) == 1 
+0

當然。簡單。我喜歡。 –

+2

它更緊湊,但我更喜歡'[true,false] .sample',因爲它立即顯而易見。 'rand(2)== 1'可以和ruby <1.9一起工作,這很好。 – Automatico

+2

既然只有'0'和'1',你也可以使用'rand(2).zero?' – Stefan

4

我通常使用的是這樣的:

rand(2) > 0 

您還可以擴展整數創建to_boolean方法:

class Integer 
    def to_boolean 
    !self.zero? 
    end 
end 
10

我喜歡用rand

rand < 0.5

編輯:此答案用於讀取rand > 0.5,但rand < 0.5在技術上更加正確。 rand返回half-open range [0,1)中的結果,因此使用<會導致半開範圍[0,0.5]和[0.5,1]的相等賠率。使用>將導致封閉範圍[0,0.5]和開放範圍(.5,1)的不等式機率。

+3

這很完美。樣本方法產生(理論上)** 50%**概率,但用這個可以調整這個概率。比如說,我希望** 70%**獲得真實價值的機會是'rand> 0.3' – juliangonzalez

+2

@JGonzalezD並且使它更直接和更易讀:**對於** 70%**而言 TNT