2010-09-29 16 views
6

मैं एक सरणी @number = [1,2,3,4,5,6,7,8,9]
अब है, मैं सरणी सामग्री randomize करना चाहते हैं ... जैसे की तरह कुछ: [5,3,2,6,7,1,8]
मेरा मार्गदर्शन करें कि यह कैसे के साथ आगे बढ़ना।randomizing सरणी तत्वों

+2

डुप्लिकेट http://stackoverflow.com/questions/1816378/कैसे-यादृच्छिक रूप से-क्रमबद्ध-scramble-an-array-in-ruby – Nakilon

+1

आपका हाइपोटेटिक फ़ंक्शन सरणी से 2 तत्वों को छोड़ देता है। यहां तक ​​कि 'shuffle' भी ऐसा नहीं कर सकता, जीजी! – Nakilon

उत्तर

9

shuffle विधि का उपयोग करें ...

irb(main):001:0> [1,2,3,4,5].shuffle 
=> [3, 4, 2, 5, 1] 
-2
loop n times 
    i = random array index 
    j = random array index 
    swap elements i and j 
end 
+0

यादृच्छिक रूप से वितरित परिणाम देने की गारंटी नहीं है। इसलिए, दो यादृच्छिक अनुक्रमणिका वाले तत्वों को स्वैप करने से आप मध्य में अपरिवर्तित अनुक्रमों के ब्लॉक के साथ सरणी दे सकते हैं। आपको 0 से एन तक बढ़ाना चाहिए और यह सुनिश्चित करने के लिए यादृच्छिक जे लेना चाहिए कि सभी * तत्व कम से कम एक बार बदल जाएंगे। –

+0

Awful। यहां तक ​​कि विषम 'n' क्रमपरिवर्तन के दो अलग-अलग सेट देता है। यह बहुत दुखी है, लेकिन फिर भी कुछ शिक्षक इस विधि के छात्रों को सिखाते हैं ... ऐसा कभी नहीं करें! – Nakilon

+0

@ नकिनॉन: ​​आप किसके बारे में बात कर रहे हैं? यह क्यों मायने रखता है कि एन भी अजीब है या नहीं? – RyanHennig

7

shuffle आदेश

जैसे एक सरणी के एक यादृच्छिक संस्करण रिटर्न:

[1,2,3].shuffle => [2,3,1] 
+1

1.8.7p249 –

+2

पर काम करता है और यदि आप जगह में यादृच्छिक बनाना चाहते हैं, तो आप केवल '@ number.shuffle लिख सकते हैं!' – Peter

-1

आप पुराने संस्करण का उपयोग कर रहे हैं रूबी का ... यह काम करेगा

def randomize(array) 
b = [] 
array.length.downto(1) { |n| 
    b.push array.delete_at(rand(n)) 
} 
b 

अंत

एक = [1,2,3,4,5] ख = अनियमित (क) प्रिंट ख

+0

दोस्त यह कोड एक गड़बड़ है! – horseyguy

+0

कम से कम, वह यहां एकमात्र ऐसा व्यक्ति है, जिसने अंतर्निहित कार्यों के बिना एक समाधान समाधान दिया। – Nakilon

1
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9] 
=> [5, 7, 3, 8, 9, 4, 2, 1, 6] 
+0

1.8.6 के लिए अच्छा :) लेकिन अब तारीख से बाहर! – horseyguy

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