Cara terbaik untuk mengembalikan nilai boolean acak

103

Saya telah menggunakan ini selama beberapa waktu untuk kembali trueatau falsesaat membuat data seed palsu. Hanya ingin tahu apakah ada yang memiliki cara yang lebih baik, lebih ringkas, atau bertele-tele untuk mengembalikan trueatau false.

rand(2) == 1 ? true : false
Chuck Bergeron
sumber
5
Berdasarkan jawaban @ a'r, apakah Anda menyadari bahwa rand(2)==1itu sudah menjadi nilai boolean?
Phrogz

Jawaban:

245

Cuplikan deklaratif menggunakan contoh Array # :

random_boolean = [true, false].sample
tokland
sumber
Sial, saya benar-benar lupa saya telah memposting pertanyaan ini. Terima kasih banyak atas jawaban yang tepat!
Chuck Bergeron
4
[true, false].samplelebih cepat dari rand(2) == 1. Ketika saya melakukan setiap operasi 10 juta kali , randmetodenya adalah 2,179s. The sampleMetode adalah 1.645s.
Mirror318
[benar, salah]. sampel tidak lebih cepat dari rand> 0,5
Ivan Castellanos
36

Bagaimana jika menghapus operator terner.

rand(2) == 1
a'r
sumber
2
Ini lebih kompak, tapi saya suka [true, false].samplelebih baik karena langsung jelas apa fungsinya. rand(2) == 1akan bekerja dengan ruby ​​<1,9, dan itu bagus.
Automatico
2
Karena hanya ada 0dan 1, Anda juga bisa menggunakanrand(2).zero?
Stefan
15

Saya suka menggunakan rand:

rand < 0.5

Sunting : Jawaban ini digunakan untuk membaca rand > 0.5tetapi rand < 0.5secara teknis lebih benar. randmengembalikan hasil dalam rentang setengah terbuka [0,1), jadi menggunakan <prospek ke peluang yang sama dari rentang setengah terbuka [0,0.5) dan [0,5,1). Menggunakan >akan menyebabkan peluang TIDAK SAMA dari kisaran tertutup [0,0.5] dan kisaran terbuka (.5,1).

JesseG17
sumber
4
Ini sempurna. Metode sampel menghasilkan (dalam teori) probabilitas 50% tetapi dengan metode ini Anda dapat menyesuaikan probabilitas itu. Katakanlah, saya ingin peluang 70% untuk mendapatkan nilai sebenarnyarand > 0.3
juliangonzalez
4
@JGonzalezD Dan untuk membuatnya lebih mudah dan mudah dibaca: rand < 0.7untuk 70%
TNT
4

Saya biasanya menggunakan sesuatu seperti ini:

rand(2) > 0

Anda juga bisa memperluas Integer untuk membuat metode to_boolean:

class Integer
  def to_boolean
    !self.zero?
  end
end
Adam Eberlin
sumber
Di ruby, hanya false dan nil yang salah, saya sangat menyarankan untuk tidak mencocokkan perilaku semacam ini.
Habax
lebih baik lagi,rand(2).zero?
Jesse Novotny