2011-11-04 16 views
88

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

rand(2) == 1 ? true : false 
+5

@ a'r द्वारा उत्तर के अनुसार, क्या आपको एहसास हुआ कि 'रैंड (2) == 1' पहले से ही एक बुलियन मूल्य है? – Phrogz

उत्तर

217

एक कथात्मक टुकड़ा Array#sample का उपयोग कर:

random_boolean = [true, false].sample 
+0

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

+4

** '[सत्य, झूठा]। नमूना' रैंड (2) == 1' से तेज़ ** है। जब मैंने प्रत्येक ऑपरेशन * 10 मिलियन बार किया * 'रैंड 'विधि 2.179 थी। 'नमूना' विधि 1.645 थी। – Mirror318

+0

[सच, झूठा]। नमूना रैंड से तेज नहीं है> 0.5 –

30

कैसे के बारे में त्रिगुट ऑपरेटर को हटाने।

rand(2) == 1 
+0

बेशक। सादगी। मुझें यह पसंद है। –

+2

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

+2

चूंकि केवल '0' और' 1' है, तो आप 'रैंड (2) .zero? ' – Stefan

4

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

rand(2) > 0 

तुम भी एक to_boolean विधि बनाने के लिए पूर्णांक का विस्तार कर सकते हैं:

class Integer 
    def to_boolean 
    !self.zero? 
    end 
end 
10

मैं का उपयोग करना चाहते rand:

rand < 0.5

संपादित करें: यह उत्तर rand > 0.5 पढ़ने के लिए उपयोग किया जाता है लेकिन rand < 0.5 अधिक तकनीकी रूप से सही है। randhalf-open range [0,1) में परिणाम देता है, इसलिए < का उपयोग करके आधे खुली श्रेणियों [0,0.5) और [0.5,1) के बराबर बाधाएं होती हैं। > का उपयोग बंद सीमा [0,0.5] और खुली रेंज (.5,1) की अनन्य बाधाओं का कारण बन जाएगा।

+3

का भी उपयोग कर सकते हैं यह सही है। नमूना विधि (सिद्धांत में) एक ** 50% ** संभावना उत्पन्न करती है लेकिन इसके साथ आप उस संभावना को समायोजित कर सकते हैं। कहें, मुझे एक ** 70% ** एक वास्तविक मूल्य प्राप्त करने का मौका होगा 'रैंड> 0.3' – juliangonzalez

+2

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

संबंधित मुद्दे