जवाबों:
उपयोग rand(range)
यदि आपको छह-पक्षीय मरने के रोल का अनुकरण करने के लिए एक यादृच्छिक पूर्णांक की आवश्यकता है, तो आप उपयोग करेंगे
1 + rand(6)
:। क्रेप्स में एक रोल के साथ अनुकरण किया जा सकता है2 + rand(6) + rand(6)
।अंत में, अगर आपको सिर्फ एक यादृच्छिक फ्लोट की आवश्यकता है, तो बस
rand
बिना किसी तर्क के कॉल करें ।
जैसा कि मार्क-एंड्रे लैफ्यून ने अपने जवाब में नीचे उल्लेख किया है (इसे ऊपर ले जाएं) , रूबी 1.9.2 की अपनी Random
कक्षा है (मार्क-आंद्रे ने खुद को डिबग करने में मदद की , इसलिए उस सुविधा के लिए 1.9.2 लक्ष्य )।
उदाहरण के लिए, इस खेल में जहां आपको 10 संख्याओं का अनुमान लगाने की आवश्यकता होती है , आप उन्हें इसके साथ आरंभ कर सकते हैं:
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
ध्यान दें:
का उपयोग करते हुए Random.new.rand(20..30)
(का उपयोग करते हुए Random.new
) आम तौर पर एक अच्छा विचार नहीं होगा, के रूप में द्वारा विस्तार से समझाया गया है (फिर से) मार्क-आंद्रे Lafortune , में अपने जवाब (फिर)।
लेकिन अगर आप उपयोग नहीं करते हैं Random.new
, तो क्लास विधिrand
केवल एक max
मान लेती है , न कि Range
, जैसा कि बैनिस्टर (ऊर्जावान) टिप्पणी में इंगित करता है (और डॉक्स के लिएRandom
दस्तावेज के रूप में )। केवल उदाहरण विधि में 7 अंकों के साथ एक यादृच्छिक संख्या उत्पन्नRange
करके सचित्र लिया जा सकता है ।
यही कारण है कि के बराबर Random.new.rand(20..30)
होगा 20 + Random.rand(11)
, क्योंकि Random.rand(int)
रिटर्न "एक यादृच्छिक पूर्णांक से अधिक या शून्य के बराबर और तर्क से कम है ।" 20..30
30 को शामिल करता है, मुझे 0 को छोड़कर 11 के बीच एक यादृच्छिक संख्या के साथ आने की आवश्यकता है।
Random
कक्षा का उल्लेख करने के लिए आपने अपने उत्तर को संपादित किया, यह बहुत अच्छा है , लेकिन Random.new
अपने उदाहरण में कई बार कॉल करना एक भयानक विचार है । मैंने अपना उत्तर उस स्थिति के लिए संपादित किया है।
Random.rand
वास्तव में एक सीमा को स्वीकार करता है । (
जब आप और (जहां 10 समावेशी और 42 अनन्य हैं) के rand(42-10) + 10
बीच एक यादृच्छिक संख्या प्राप्त करने के लिए उपयोग कर सकते हैं , रूबी 1.9.3 के बाद से एक बेहतर तरीका है, जहां आप कॉल करने में सक्षम हैं:10
42
rand(10...42) # => 13
मेरे backports
मणि की आवश्यकता द्वारा रूबी के सभी संस्करणों के लिए उपलब्ध है ।
रूबी 1.9.2 ने Random
वर्ग भी पेश किया ताकि आप अपनी यादृच्छिक संख्या जनरेटर ऑब्जेक्ट बना सकें और एक अच्छा एपीआई हो:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Random
वर्ग ही है, एक यादृच्छिक जनरेटर के रूप में कार्य करता है ताकि आप सीधे कॉल:
Random.rand(10...42) # => same as rand(10...42)
पर नोट करता है Random.new
ज्यादातर मामलों में, सबसे सरल उपयोग rand
या है Random.rand
। हर बार जब आप एक यादृच्छिक संख्या चाहते हैं एक नया यादृच्छिक जनरेटर बनाना एक बहुत बुरा विचार है । यदि आप ऐसा करते हैं, तो आपको प्रारंभिक सीडिंग एल्गोरिथम के यादृच्छिक गुण मिलेंगे जो कि यादृच्छिक जनरेटर के गुणों की तुलना में अत्याचारी हैं ।
यदि आप उपयोग करते हैं Random.new
, तो आपको इस तरह से शायद ही कभी कॉल करना चाहिए , उदाहरण के लिए एक बार के रूप में MyApp::Random = Random.new
और हर जगह इसका उपयोग करें।
जिन मामलों Random.new
में मददगार हैं वे निम्नलिखित हैं:
rand
/ के अनुक्रम में हस्तक्षेप नहीं करना चाहते हैंRandom.rand
Random
ऑब्जेक्ट्स को पिघलाया जा सकता है)backports
रत्न केवल उन तरीकों का एक संग्रह है जो RUby 1.8.7, 1.9.1, 1.9.2 के लिए नए हैं, लेकिन रूबी में लागू किए गए हैं। मैं रूबीस्पेक का उपयोग यह सुनिश्चित करने के लिए करता हूं कि परिणाम रूबी के साथ संगत हैं।
Random.rand(10..42)
काम नहीं करता। Random.rand
वर्ग विधि एक सीमा को स्वीकार नहीं करता। (रूबी १.९ .२ पीपी १y०)
यदि आप न केवल एक नंबर बल्कि हेक्स या यूआईडी के लिए भी मांग कर रहे हैं, तो यह ध्यान देने योग्य है कि SecureRandom
मॉड्यूल ने ActiveSupport
1.9.2+ में रूबी कोर से अपना रास्ता पाया । तो एक पूर्ण विकसित रूपरेखा की आवश्यकता के बिना:
require 'securerandom'
p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88
p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409
p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
इसे यहाँ प्रलेखित किया गया है: रूबी 1.9.3 - मॉड्यूल: सिक्योर रैंडम (lib / securerandom.rb)
SecureRandom.random_number(1000..9999)
SecureRandom.random_number()
कोई सीमा नहीं है, इसलिए नहीं। आप शायद SecureRandom.random_number(10_000)
(0-9999 के लिए) या SecureRandom.random_number(9_000)+1_000
(1000-9999 के लिए ) कुछ चाहते हैं ।
आप rand
विधि के साथ एक यादृच्छिक संख्या उत्पन्न कर सकते हैं । rand
विधि को दिया गया तर्क एक integer
या एक होना चाहिए range
, और सीमा के भीतर एक समान यादृच्छिक संख्या देता है:
rand(9) # this generates a number between 0 to 8
rand(0 .. 9) # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range
rand(1..6)
है कि शीर्ष उत्तर की तुलना में आपके रीड्स क्लियर का उपयोग करना rand(6)+1
।
खैर, मुझे लगा। जाहिरा तौर पर एक रैंडिन (?) फ़ंक्शन है जिसे रैंड कहा जाता है:
rand(n + 1)
यदि कोई अधिक विस्तृत उत्तर के साथ उत्तर देता है, तो मैं उसे सही उत्तर के रूप में चिह्नित करूंगा।
प्रश्न का सबसे सरल उत्तर:
rand(0..n)
आप बस उपयोग कर सकते हैं random_number
।
यदि एक पूर्णांक पूर्णांक n के रूप में दिया जाता है, तो random_number
पूर्णांक देता है: 0 <= random_number
<n।
इसे इस तरह उपयोग करें:
any_number = SecureRandom.random_number(100)
आउटपुट 0 और 100 के बीच कोई भी संख्या होगी।
rand(6) #=> gives a random number between 0 and 6 inclusively
rand(1..6) #=> gives a random number between 1 and 6 inclusively
ध्यान दें कि रेंज विकल्प केवल रूबी के नए (1.9+ मेरा मानना है) संस्करणों में उपलब्ध है।
ruby 1.9.3+
। 1.9.2
जब मैंने कम से कम कोशिश की तो यह काम नहीं किया ।
रेंज = 10..50
रैंड (सीमा)
या
range.to_a.sample
या
range.to_a.shuffle (यह संपूर्ण सरणी फेरबदल करेगा और आप इस सरणी से यादृच्छिक एक लेने के लिए पहले या अंतिम या किसी भी द्वारा एक यादृच्छिक संख्या चुन सकते हैं)
range.to_a.sample
एक बड़ा विचार है जब नमूना बड़ा है।
आप रैंड (रेंज) कर सकते हैं
x = rand(1..5)
यह लिंक इस बारे में मददगार होने जा रहा है;
http://ruby-doc.org/core-1.9.3/Random.html
और रूबी में यादृच्छिक संख्याओं के नीचे कुछ और स्पष्टता;
0 से 10 तक पूर्णांक बनाएं
puts (rand() * 10).to_i
0 से 10 तक एक संख्या उत्पन्न करें अधिक पठनीय तरीके से
puts rand(10)
10 से 15 तक की संख्या को शामिल करें जिसमें 15 शामिल हैं
puts rand(10..15)
गैर-यादृच्छिक रैंडम नंबर
हर बार कार्यक्रम चलने पर संख्याओं का समान क्रम बनाएं
srand(5)
10 यादृच्छिक संख्या उत्पन्न करें
puts (0..10).map{rand(0..10)}
शायद यह आपकी मदद करे। मैं अपने ऐप में इसका इस्तेमाल करता हूं
https://github.com/rubyworks/facets
class String
# Create a random String of given length, using given character set
#
# Character set is an Array which can contain Ranges, Arrays, Characters
#
# Examples
#
# String.random
# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
#
# String.random(10)
# => "t8BIna341S"
#
# String.random(10, ['a'..'z'])
# => "nstpvixfri"
#
# String.random(10, ['0'..'9'] )
# => "0982541042"
#
# String.random(10, ['0'..'9','A'..'F'] )
# => "3EBF48AD3D"
#
# BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-']
# String.random(10, BASE64_CHAR_SET)
# => "xM_1t3qcNn"
#
# SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
# BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
# String.random(10, BASE91_CHAR_SET)
# => "S(Z]z,J{v;"
#
# CREDIT: Tilo Sloboda
#
# SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
#
# TODO: Move to random.rb in standard library?
def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
Array.new(len){ chars.sample }.join
end
end
यह मेरे लिए ठीक काम करता है
इसके बारे में क्या खयाल है?
num = Random.new
num.rand(1..n)
array#shuffle
रैंडमाइजेशन के लिए विधि आजमाएं
array = (1..10).to_a
array.shuffle.first
.shuffle.first
के साथ .sample
!
srand <some_number>
लिखने से पहले उपयोग करने सेrand
आपको एक नियतात्मक (यानी दोहराने योग्य) छद्म यादृच्छिक अनुक्रम मिलेगा, अगर आपको इसकी आवश्यकता है। रूबी-doc.org/core-2.5.6/Random.html#method-c-srand