मैं अपने सरणी आइटम तले करना चाहते हैं। कुछ इस तरह:
[1,2,3,4].scramble => [2,1,3,4]
[1,2,3,4].scramble => [3,1,2,4]
[1,2,3,4].scramble => [4,2,3,1]
और इसी तरह, बेतरतीब ढंग से
मैं अपने सरणी आइटम तले करना चाहते हैं। कुछ इस तरह:
[1,2,3,4].scramble => [2,1,3,4]
[1,2,3,4].scramble => [3,1,2,4]
[1,2,3,4].scramble => [4,2,3,1]
और इसी तरह, बेतरतीब ढंग से
जवाबों:
अब में निर्मित:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
!
फेरबदल करने के लिए कॉल के बाद जोड़ें । बिना !
फेरबदल के सरणी वापस आ गई है, और एक असाइनमेंट के लिए पका हुआ है।
रूबी 1.8.6 के लिए (जिसमें फेरबदल नहीं किया गया है):
array.sort_by { rand }
sort_by
कार्य जावास्क्रिप्ट के सॉर्ट फ़ंक्शन (या उस मामले के लिए रूबी का प्रकार फ़ंक्शन) की तरह काम नहीं करता है, जो केवल यह ध्यान रखता है कि क्या गणना की गई संख्या शून्य से कम है, शून्य या शून्य से अधिक है। इसके बजाय sort_by
प्रत्येक आइटम के लिए गणना किए गए मूल्य को याद करता है और फिर उस मूल्य द्वारा आइटम को सॉर्ट करता है। तो इस मामले में प्रत्येक आइटम को एक यादृच्छिक संख्या दी जाती है और फिर उन यादृच्छिक संख्याओं द्वारा सरणी को क्रमबद्ध किया जाता है।
रूबी 1.8.6 के लिए ऐरे के लिए बैकपोर्ट जेम से कोड । रूबी 1.8.7 या उच्चतर में बनाया गया है।
class Array
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
def shuffle
dup.shuffle!
end unless method_defined? :shuffle
# Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
def shuffle!
size.times do |i|
r = i + Kernel.rand(size - i)
self[i], self[r] = self[r], self[i]
end
self
end unless method_defined? :shuffle!
end
रूबी पहलुओं एक्सटेंशन के पुस्तकालय एक है Random
मॉड्यूल जो सहित उपयोगी तरीके प्रदान shuffle
और shuffle!
सहित मुख्य वर्गों में से एक गुच्छा के लिए Array
, Hash
और String
।
यदि आप रेल का उपयोग कर रहे हैं तो सावधान रहें क्योंकि मैंने कुछ खराब झड़पों का अनुभव किया है, क्योंकि इसके बंदर पकड़ने वाले रेल के साथ टकरा गए थे ...