Найкращий спосіб повернення випадкового булевого значення


103

Я використовую це деякий час для повернення trueабо falseпри створенні підроблених даних про насіння. Цікаво, чи хтось має кращий, більш стислий чи багатослівний спосіб повернення trueабо false.

rand(2) == 1 ? true : false

5
Відповідаючи на відповідь @ a'r, ви зрозуміли, що rand(2)==1це вже булеве значення?
Фрогз

Відповіді:


245

Декларативний фрагмент з використанням зразка Array # :

random_boolean = [true, false].sample

Чорт, я зовсім забув, що розмістив це питання. Велике спасибі за чудову відповідь!
Чак Бержерон

4
[true, false].sampleшвидше, ніж rand(2) == 1. Коли я виконав кожну операцію 10 мільйонів разівrand метод був 2.179s. sampleМетод був 1.645s.
Дзеркало318

[true, false]. вибірка не швидше, ніж rand> 0.5
Іван Кастелланос,

36

Як щодо видалення термінального оператора.

rand(2) == 1

2
Він більш компактний, але мені подобається [true, false].sampleкраще, тому що миттєво очевидно, що він робить. rand(2) == 1працював би з рубіном <1,9, хоча це добре.
Automatico

2
Оскільки є тільки 0і 1, ви також можете використовуватиrand(2).zero?
Stefan

15

Мені подобається використовувати rand:

rand < 0.5

Редагувати : Ця відповідь використовується для читання, rand > 0.5але rand < 0.5є більш технічно правильною.randповертає результат у напіввідкритому діапазоні [0,1), тому використання <веде до рівних шансів напіввідкритих діапазонів [0,0.5) та [0,5,1). Використання >призвело б до НЕВІДКОВИХ шансів закритого діапазону [0,0.5] та відкритого діапазону (.5,1).


4
Це прекрасно. Вибірковий метод дає теоретично 50% ймовірність, але за допомогою цього ви можете скоригувати цю ймовірність. Скажіть, я хочу, щоб 70% шансів отримати справжню цінність було бrand > 0.3
juliangonzalez

4
@JGonzalezD І щоб зробити це більш зрозумілим і зрозумілим: rand < 0.7для 70%
TNT

4

Я зазвичай використовую щось подібне:

rand(2) > 0

Ви також можете розширити Integer, щоб створити метод to_boolean:

class Integer
  def to_boolean
    !self.zero?
  end
end

У рубіні, лише фальшиві та нульові - фальси, я настійно рекомендую не маніпулювати подібну поведінку.
Хабакс

ще краще,rand(2).zero?
Джессі Новотний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.