He estado usando esto durante algún tiempo para regresar true
o false
al crear datos de semillas falsos. Sólo me preguntaba si alguien tiene una mejor manera, más conciso o detallado de volver, ya sea true
o false
.
rand(2) == 1 ? true : false
He estado usando esto durante algún tiempo para regresar true
o false
al crear datos de semillas falsos. Sólo me preguntaba si alguien tiene una mejor manera, más conciso o detallado de volver, ya sea true
o false
.
rand(2) == 1 ? true : false
Respuestas:
Un fragmento declarativo que usa Array # sample :
random_boolean = [true, false].sample
[true, false].sample
es más rápido que rand(2) == 1
. Cuando realicé cada operación 10 millones de veces, el rand
método fue 2.179s. El sample
método fue 1.645s.
¿Qué tal eliminar el operador ternario?
rand(2) == 1
[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
y 1
, también podría usarrand(2).zero?
Me gusta usar rand
:
rand < 0.5
Editar : esta respuesta solía leer rand > 0.5
pero rand < 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).
rand > 0.3
rand < 0.7
al 70%
Normalmente uso algo como esto:
rand(2) > 0
También puede extender Integer para crear un método to_boolean:
class Integer
def to_boolean
!self.zero?
end
end
rand(2).zero?
rand(2)==1
ya es un valor booleano?