La mejor forma de devolver un valor booleano aleatorio
103
He estado usando esto durante algún tiempo para regresar trueo falseal crear datos de semillas falsos. Sólo me preguntaba si alguien tiene una mejor manera, más conciso o detallado de volver, ya sea trueo false.
Maldita sea, olvidé por completo que publiqué esta pregunta. ¡Muchas gracias por la respuesta explosiva!
Chuck Bergeron
4
[true, false].samplees más rápido que rand(2) == 1. Cuando realicé cada operación 10 millones de veces, el randmétodo fue 2.179s. El samplemétodo fue 1.645s.
Mirror318
[verdadero, falso] .sample no es más rápido que rand> 0.5
Es más compacto, pero me gusta [true, false].samplemás porque es obvio al instante lo que hace. rand(2) == 1Sin embargo, funcionaría con ruby <1.9, lo cual es bueno.
Automático
2
Como solo hay 0y 1, también podría usarrand(2).zero?
Stefan
15
Me gusta usar rand:
rand < 0.5
Editar : esta respuesta solía leer rand > 0.5pero rand < 0.5es más técnicamente correcta. randdevuelve un resultado en el rango semiabierto [0,1), por lo que el uso <conduce a probabilidades iguales de rangos semiabiertos [0,0.5) y [0.5,1). El uso >conduciría a probabilidades DESIGUALES del rango cerrado [0,0.5] y del rango abierto (.5,1).
Esto es perfecto. El método de muestra produce (en teoría) una probabilidad del 50% pero con este puedes ajustar esa probabilidad. Digamos, quiero un 70% de posibilidades de obtener un valor realrand > 0.3
juliangonzalez
4
@JGonzalezD Y para hacerlo más sencillo y legible: rand < 0.7al 70%
TNT
4
Normalmente uso algo como esto:
rand(2)>0
También puede extender Integer para crear un método to_boolean:
rand(2)==1
ya es un valor booleano?Respuestas:
Un fragmento declarativo que usa Array # sample :
fuente
[true, false].sample
es más rápido querand(2) == 1
. Cuando realicé cada operación 10 millones de veces, elrand
método fue 2.179s. Elsample
método fue 1.645s.¿Qué tal eliminar el operador ternario?
fuente
[true, false].sample
más porque es obvio al instante lo que hace.rand(2) == 1
Sin embargo, funcionaría con ruby <1.9, lo cual es bueno.0
y1
, también podría usarrand(2).zero?
Me gusta usar
rand
:rand < 0.5
Editar : esta respuesta solía leer
rand > 0.5
perorand < 0.5
es más técnicamente correcta.rand
devuelve un resultado en el rango semiabierto [0,1), por lo que el uso<
conduce a probabilidades iguales de rangos semiabiertos [0,0.5) y [0.5,1). El uso>
conduciría a probabilidades DESIGUALES del rango cerrado [0,0.5] y del rango abierto (.5,1).fuente
rand > 0.3
rand < 0.7
al 70%Normalmente uso algo como esto:
También puede extender Integer para crear un método to_boolean:
fuente
rand(2).zero?