Rastgele bir boole değeri döndürmenin en iyi yolu


103

Bunu bir süredir geri dönmek için trueveya falsesahte tohum verileri oluştururken kullanıyorum. Merak ediyorum, herhangi birinin daha iyi, daha özlü ya da ayrıntılı bir şekilde ya trueda ya da geri dönüş yolu olup olmadığını merak ediyorum false.

rand(2) == 1 ? true : false

5
@ A'r yanıtına göre, bunun rand(2)==1zaten bir boole değeri olduğunu fark ettiniz mi ?
Phrogz

Yanıtlar:


245

Array # sample kullanan bir bildirime dayalı snippet :

random_boolean = [true, false].sample

Kahretsin, bu soruyu gönderdiğimi tamamen unutmuşum. Patlama cevabı için çok teşekkürler!
Chuck Bergeron

4
[true, false].sampledaha hızlıdır rand(2) == 1. Her işlemi gerçekleştirildiğinde, 10 milyon kererand yöntemi 2.179s oldu. sampleYöntem 1.645s oldu.
Mirror318

[doğru, yanlış]. örnek rand> 0,5'ten hızlı değil
Ivan Castellanos

36

Üçlü operatörü kaldırmaya ne dersiniz?

rand(2) == 1

2
Daha kompakt, ama [true, false].sampledaha çok seviyorum çünkü ne yaptığı hemen belli oluyor. rand(2) == 1Ruby <1.9 ile çalışacak olsa da, bu iyi.
Automatico

2
Yalnızca 0ve olduğu için 1kullanabilirsinizrand(2).zero?
Stefan

15

Kullanmayı seviyorum rand:

rand < 0.5

Düzenleme : Bu cevap okumak için kullanılır, rand > 0.5ancak rand < 0.5teknik olarak daha doğrudur. yarı açık aralık [0,1) ' randde bir sonuç döndürür , bu nedenle , yarı açık aralıklar [0,0.5) ve [0.5,1) eşit olasılıklara yol açar. Kullanımı , kapalı aralık [0,0.5] ve açık aralık (.5,1) için EŞİT OLMAYAN oranlara yol açar.<>


4
Bu harika. Örnek yöntem (teoride) % 50 olasılık üretir, ancak bununla bu olasılığı ayarlayabilirsiniz. Diyelim ki, gerçek bir değer elde etmek için % 70 şans istiyorumrand > 0.3
juliangonzalez

4
@JGonzalezD Ve daha anlaşılır ve okunabilir hale getirmek için: rand < 0.7için % 70
TNT

4

Genellikle şöyle bir şey kullanırım:

rand(2) > 0

Bir to_boolean yöntemi oluşturmak için Tamsayı da genişletebilirsiniz:

class Integer
  def to_boolean
    !self.zero?
  end
end

Ruby'de, yalnızca false ve nil yanlıştır, bu tür davranışları taklit etmemenizi şiddetle tavsiye ederim.
Habax

daha da iyisi,rand(2).zero?
Jesse Novotny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.