Beste Möglichkeit, einen zufälligen booleschen Wert zurückzugeben


103

Ich benutze dies seit einiger Zeit, um entweder zurückzukehren trueoder falseum gefälschte Seed-Daten zu erstellen. Ich frage mich nur, ob jemand eine bessere, prägnantere oder ausführlichere Art hat, entweder trueoder zurückzukehren false.

rand(2) == 1 ? true : false

5
Haben Sie gemäß der Antwort von @ a'r festgestellt, dass dies rand(2)==1bereits ein boolescher Wert ist?
— Phrogz

Antworten:


245

Ein deklaratives Snippet mit Array # sample :

random_boolean = [true, false].sample

Verdammt, ich habe total vergessen, dass ich diese Frage gestellt habe. Vielen Dank für die knallharte Antwort!
— Chuck Bergeron

4
[true, false].sampleist schneller als rand(2) == 1. Als ich jede Operation 10 Millionen Mal durchführterand , betrug die Methode 2,179 Sekunden. Die sampleMethode war 1.645s.
— Mirror318

[wahr, falsch]. Probe ist nicht schneller als Rand> 0,5
— Ivan Castellanos

36

Wie wäre es mit dem Entfernen des ternären Operators.

rand(2) == 1

2
Es ist kompakter, aber ich mag es [true, false].samplebesser, weil es sofort offensichtlich ist, was es tut. rand(2) == 1würde allerdings mit rubin <1,9 arbeiten, was gut ist.
— Automatico

2
Da gibt es nur 0und 1, könnten Sie auch verwendenrand(2).zero?
— Stefan

15

Ich benutze gerne rand:

rand < 0.5

Bearbeiten : Diese Antwort wurde zum Lesen verwendet rand > 0.5, rand < 0.5ist aber technisch korrekter. randGibt ein Ergebnis im halboffenen Bereich [0,1] zurück. Die Verwendung <führt also zu gleichen Quoten für halboffene Bereiche [0,0,5) und [0,5,1). Die Verwendung >würde zu UNGLEICHEN Gewinnchancen im geschlossenen Bereich [0,0,5] und im offenen Bereich (0,5,1) führen.


4
Dies ist perfekt. Die Stichprobenmethode ergibt (theoretisch) eine Wahrscheinlichkeit von 50%, aber mit dieser können Sie diese Wahrscheinlichkeit anpassen. Angenommen, ich möchte eine 70% ige Chance, einen echten Wert zu erhaltenrand > 0.3
— juliangonzalez

4
@JGonzalezD Und um es einfacher und lesbarer zu machen: rand < 0.7für 70%
— TNT

4

Normalerweise benutze ich so etwas:

rand(2) > 0

Sie können Integer auch erweitern, um eine to_boolean-Methode zu erstellen:

class Integer
  def to_boolean
    !self.zero?
  end
end

In Ruby sind nur Falsch und Null Falsch, ich empfehle dringend, diese Art von Verhalten nicht zu monkeypatchen.
— Habax

noch besser,rand(2).zero?
— Jesse Novotny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.