วิธีที่ดีที่สุดในการคืนค่าบูลีนแบบสุ่ม


103

ฉันใช้สิ่งนี้มาระยะหนึ่งเพื่อส่งคืนtrueหรือfalseเมื่อสร้างข้อมูลเมล็ดพันธุ์ปลอม แค่สงสัยว่าใครมีวิธีการคืนสินค้าที่ดีกว่ารวบรัดกว่าtrueหรือละเอียดfalseกว่าหรือ

rand(2) == 1 ? true : false

5
ตามคำตอบของ @ a'r คุณรู้หรือไม่ว่านั่นrand(2)==1เป็นค่าบูลีนแล้ว
Phrogz

คำตอบ:


245

ตัวอย่างข้อมูลที่เปิดเผยโดยใช้Array # sample :

random_boolean = [true, false].sample

ให้ตายเถอะฉันลืมไปเลยว่าฉันโพสต์คำถามนี้ ขอบคุณมากสำหรับคำตอบที่ปัง!
Chuck Bergeron

4
[true, false].sampleจะเร็วrand(2) == 1กว่า เมื่อผมดำเนินการในแต่ละการดำเนินงาน10 ล้านครั้งrandวิธีการเป็น 2.179s sampleวิธีการเป็น 1.645s
Mirror318

[จริงเท็จ] ตัวอย่างไม่เร็วกว่าแรนด์> 0.5
Ivan Castellanos

36

วิธีการลบตัวดำเนินการ ternary

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%
ทีเอ็นที

4

ฉันมักจะใช้สิ่งนี้:

rand(2) > 0

คุณยังสามารถขยาย Integer เพื่อสร้าง to_boolean method:

class Integer
  def to_boolean
    !self.zero?
  end
end

ในทับทิมมีเพียงเท็จและศูนย์เท่านั้นที่เป็นเท็จฉันขอแนะนำอย่างยิ่งว่าอย่าจับลิงกับพฤติกรรมแบบนี้
Habax

ยังดีกว่าrand(2).zero?
Jesse Novotny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.