एक यादृच्छिक बूलियन मूल्य वापस करने का सबसे अच्छा तरीका है


103

मैं कुछ समय के लिए trueया falseनकली बीज डेटा के निर्माण के लिए वापस आने के लिए इसका उपयोग कर रहा हूं । बस सोच रहा था कि किसी के पास या तो वापसी का एक बेहतर, अधिक रसीला या क्रियात्मक तरीका है trueया false

rand(2) == 1 ? true : false

5
@ A'r के उत्तर के अनुसार, क्या आपको एहसास हुआ कि rand(2)==1पहले से ही एक बूलियन मूल्य है?
फ़रोगज़

जवाबों:


245

ऐरे # नमूने का उपयोग कर एक घोषणात्मक स्निपेट :

random_boolean = [true, false].sample

धिक्कार है, मैं पूरी तरह से भूल गया मैं इस प्रश्न को पोस्ट किया। धमाकेदार जवाब के लिए बहुत बहुत धन्यवाद!
चक बर्जरन

4
[true, false].sampleसे तेज है rand(2) == 1। जब मैंने प्रत्येक ऑपरेशन 10 मिलियन बार किया , तो randविधि 2.179s थी। sampleविधि 1.645s था।
मिरर318

[सच, गलत]। नमूना रैंड से अधिक तेज नहीं है 0.5
इवान कास्टेलानोस

36

कैसे टर्नरी ऑपरेटर को हटाने के बारे में।

rand(2) == 1

2
यह अधिक कॉम्पैक्ट है, लेकिन मुझे [true, false].sampleबेहतर पसंद है क्योंकि यह तुरंत स्पष्ट है कि यह क्या करता है। rand(2) == 1रूबी के साथ काम करेंगे <1.9 हालांकि, जो अच्छा है।
स्वचालित

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) के अद्वितीय संकट पैदा होंगे।<>


4
यह पूर्ण है। नमूना विधि एक ( 50% ) संभाव्यता पैदा करती है, लेकिन इस के साथ आप उस संभावना को समायोजित कर सकते हैं। कहते हैं, मैं एक 70% एक सच्चा मूल्य प्राप्त करने का मौका चाहता हूँrand > 0.3
juliangonzalez

4
@JGonzalezD और इसे और अधिक सरल और पठनीय बनाने के rand < 0.7लिए : 70% के लिए
TNT

4

मैं आमतौर पर कुछ इस तरह का उपयोग करता हूं:

rand(2) > 0

आप एक to_boolean विधि बनाने के लिए Integer का विस्तार भी कर सकते हैं:

class Integer
  def to_boolean
    !self.zero?
  end
end

माणिक्य में, केवल झूठे और शून्य झूठे होते हैं, मैं दृढ़ता से इस तरह के व्यवहार को बंद नहीं करने की सलाह देता हूं।
हेबैक्स

बेहतर अभी तक,rand(2).zero?
जेसी नोवोटनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.