2012-12-06 10 views
9

मैं देशों की एक सरणी है:मैं कैसे रूबी में एक सरणी (नहीं रेल) ​​से एक यादृच्छिक आइटम का चयन करते

@countries = ["Canada", "Denmark", "Germany", "Isle of Man", "Namibia", "Qatar", "South Africa", "United Kingdom","United States"] 

और इस तरह के परीक्षण के लिए कुछ यादृच्छिक डेटा का निर्माण कर रहा हूँ:

@test = [{ :name => "AAA -"+Faker::Name.name, :country => @countries.???? ....}] 

मुझे @countries हैश से यादृच्छिक मूल्य कैसे प्राप्त हो सकता है?

@countries.rand(mlen) 

काम नहीं करता है और NoMethodError: private method रैंड '# के लिए बुलाया जाता है।

+1

भविष्य के संदर्भ के लिए, आपको देशों की अपनी डेटा संरचना का संदर्भ 'सरणी' के रूप में 'हैश' नहीं होना चाहिए। –

+0

[Array] (http://apidock.com/ruby/Array) और [गणनायोग्य] (http://apidock.com/ruby/Enumerable) में सभी विधियों से परिचित होना अच्छा है। यह आपको बहुत से प्रयासों को बचाएगा और आपके कार्यक्रमों को कम करेगा! –

+0

धन्यवाद - मैं थोड़ी देर के लिए खो गया। – Gary

उत्तर

26

उपयोग Array#sample:

@countries = ["Canada", "Denmark", "Germany", "Isle of Man", "Namibia", "Qatar", "South Africa", "United Kingdom","United States"] 

random_country = @countries.sample 
# => "Canada" 

random_country = @countries.sample 
# => "United Kingdom" 
+0

बहुत अच्छा काम करता है। मैंने रैंड की कोशिश की लेकिन यह एक निजी विधि है। रूबी में कई छिपे हुए रत्न हैं। रूबी 1.8.7 के लिए – Gary

+0

, यह [ऐरे # पसंद] है (http://ruby-doc.org/core-1.8.7/Array.html#method-i-choice) – robd

3

तुम भी random_country = @countries.shuffle.first इस्तेमाल कर सकते हैं।

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