Meilleur moyen de renvoyer une valeur booléenne aléatoire


103

Je l'utilise depuis un certain temps pour retourner trueou falsepour créer de fausses données de semences. Je me demande simplement si quelqu'un a une meilleure façon, plus succincte ou plus détaillée de renvoyer l'un trueou l' autre false.

rand(2) == 1 ? true : false

5
D'après la réponse de @ a'r, avez-vous réalisé que rand(2)==1c'est déjà une valeur booléenne?
Phrogz

Réponses:


245

Un extrait de code déclaratif utilisant l'exemple Array # :

random_boolean = [true, false].sample

Merde, j'ai totalement oublié que j'ai posté cette question. Merci beaucoup pour la réponse!
Chuck Bergeron

4
[true, false].sampleest plus rapide que rand(2) == 1. Lorsque j'ai effectué chaque opération 10 millions de fois, la randméthode était de 2,179 s. La sampleméthode était de 1,645 s.
Mirror318 du

[true, false] .sample is not fast than rand> 0.5
Ivan Castellanos

36

Que diriez-vous de supprimer l'opérateur ternaire.

rand(2) == 1

2
Il est plus compact, mais j'aime [true, false].samplemieux car ce qu'il fait est immédiatement évident. rand(2) == 1fonctionnerait avec ruby ​​<1,9, ce qui est bien.
Automatico

2
Puisqu'il n'y a que 0et 1, vous pouvez également utiliserrand(2).zero?
Stefan

15

J'aime utiliser rand:

rand < 0.5

Edit : Cette réponse lisait rand > 0.5mais rand < 0.5est plus techniquement correcte. randrenvoie un résultat dans la plage semi-ouverte [0,1), donc l'utilisation <conduit à des cotes égales des plages semi-ouvertes [0,0.5) et [0.5,1). L'utilisation >conduirait à des cotes INÉGALES de la plage fermée [0,0.5] et de la plage ouverte (.5,1).


4
C'est parfait. La méthode d'échantillonnage produit (en théorie) une probabilité de 50%, mais avec celle-ci, vous pouvez ajuster cette probabilité. Dites, je veux une chance de 70% d'obtenir une valeur réelle seraitrand > 0.3
juliangonzalez

4
@JGonzalezD Et pour le rendre plus simple et lisible: rand < 0.7pour 70%
TNT

4

J'utilise généralement quelque chose comme ceci:

rand(2) > 0

Vous pouvez également étendre Integer pour créer une méthode to_boolean:

class Integer
  def to_boolean
    !self.zero?
  end
end

En ruby, seuls faux et nil sont faux, je recommande fortement de ne pas faire de monkeypatch ce genre de comportement.
Habax

mieux encore,rand(2).zero?
Jesse Novotny
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.