Najlepszy sposób na zwrócenie losowej wartości logicznej


103

Używam tego od jakiegoś czasu, aby powrócić truelub falsepodczas tworzenia fałszywych danych nasion. Zastanawiam się tylko, czy ktokolwiek ma lepszy, bardziej zwięzły lub szczegółowy sposób zwracania albo truealbo false.

rand(2) == 1 ? true : false

5
Zgodnie z odpowiedzią @ a'r, czy zdałeś sobie sprawę, że rand(2)==1jest to już wartość logiczna?
Phrogz

Odpowiedzi:


245

Deklaratywny fragment kodu przy użyciu przykładowej tablicy # :

random_boolean = [true, false].sample

Cholera, zupełnie zapomniałem, że opublikowałem to pytanie. Dziękuję bardzo za odpowiedź!
Chuck Bergeron

4
[true, false].samplejest szybszy niż rand(2) == 1. Kiedy wykonywane Każda operacja 10 milionów razyrand metoda była 2.179s. sampleMetoda była 1.645s.
Mirror318

[prawda, fałsz] .sample nie jest szybsza niż rand> 0,5
Ivan Castellanos,

36

Co powiesz na usunięcie operatora trójskładnikowego.

rand(2) == 1

2
Jest bardziej kompaktowy, ale bardziej mi się podoba, [true, false].sampleponieważ od razu widać, co robi. rand(2) == 1działałby z ruby ​​<1,9, co jest dobre.
Automatico

2
Ponieważ jest tylko 0i 1, możesz również użyćrand(2).zero?
Stefan

15

Lubię używać rand:

rand < 0.5

Edycja : ta odpowiedź była czytana, rand > 0.5ale rand < 0.5jest bardziej poprawna technicznie. randzwraca wynik w przedziale półotwartym [0,1), więc użycie <prowadzi do równych szans przedziałów półotwartych [0,0,5) i [0,5,1). Użycie >prowadziłoby do NIERÓWNYCH kursów z zakresu zamkniętego [0,0,5] i zakresu otwartego (.5,1).


4
To jest doskonałe. Metoda przykładowa daje (teoretycznie) prawdopodobieństwo 50%, ale tą metodą można skorygować to prawdopodobieństwo. Powiedz, chcę, aby 70% szans na uzyskanie prawdziwej wartości byłorand > 0.3
juliangonzalez

4
@JGonzalezD I aby uczynić go bardziej prostym i czytelnym: rand < 0.7dla 70%
TNT

4

Zwykle używam czegoś takiego:

rand(2) > 0

Możesz również rozszerzyć Integer, aby utworzyć metodę to_boolean:

class Integer
  def to_boolean
    !self.zero?
  end
end

W ruby ​​tylko fałsz i zero są fałszywe, zdecydowanie odradzam śledzenie tego typu zachowań na małpach.
Habax

jeszcze lepiejrand(2).zero?
Jesse Novotny
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.