임의의 부울 값을 반환하는 가장 좋은 방법


103

나는 가짜 시드 데이터를 만들 true거나 반환하기 위해 얼마 동안 이것을 사용했습니다 false. 누군가가 중 반환의 더 나은, 더 간결 또는 자세한 방법이 있는지 궁금해 true또는 false.

rand(2) == 1 ? true : false

5
@ a'r의 대답에 따르면 rand(2)==1이미 부울 값 이라는 것을 알고 있습니까?
Phrogz 2011

답변:


245

Array # sample을 사용하는 선언적 스 니펫 :

random_boolean = [true, false].sample

젠장,이 질문을 게시하는 것을 완전히 잊었습니다. 뱅온 답변에 감사드립니다!
Chuck Bergeron

4
[true, false].sample빠른 것보다 rand(2) == 1. 나는 각 작업을 수행 할 때 1000 만 번rand 방법은 2.179s했다. sample방법은 1.645s했다.
Mirror318

[TRUE, FALSE] .sample는> 0.5 빠르지 랜드보다
이반 카스텔라

36

삼항 연산자를 제거하는 것은 어떻습니까?

rand(2) == 1

2
더 콤팩트하지만 [true, false].sample어떤 일을하는지 즉시 알 수 있기 때문에 더 좋습니다. rand(2) == 1그래도 루비 1.9 미만에서는 작동합니다.
Automatico

2
이 단지이기 때문에 0그리고 1, 당신은 또한 사용할 수 있습니다rand(2).zero?
스테판

15

나는 사용하고 싶다 rand:

rand < 0.5

편집 :이 답변은 읽기에 사용 rand > 0.5되었지만 rand < 0.5기술적으로 더 정확합니다. 반 개방 범위 [0,1) rand의 결과를 반환 하므로를 사용 하면 반 개방 범위 [0,0.5) 및 [0.5,1)의 동일한 확률이 발생합니다. 를 사용 하면 닫힌 범위 [0,0.5]와 열린 범위 (.5,1)의 UNEQUAL 확률이 발생합니다.<>


4
이것은 완벽 해요. 샘플 방법은 (이론적으로) 50 % 확률을 생성하지만이 방법을 사용하면 해당 확률을 조정할 수 있습니다. 말, 내가 원하는 70 % 될 것 true 값을 얻기의 기회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

루비에서는 false와 nil 만 false입니다. 이런 종류의 동작을 monkeypatch하지 말 것을 강력히 권장합니다.
Habax

더 나은 아직,rand(2).zero?
Jesse Novotny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.