शायद मैं questi ग़लत व्याख्या कर रहा हूँ क्या करेंगे चूंकि दूसरा उत्तर पहले से ही स्वीकार कर लिया गया है, लेकिन ऐसा लगता है कि आप सरणी को 3 बराबर समूहों में विभाजित करना चाहते थे, चाहे प्रत्येक समूह के आकार के बावजूद, इसे पिछले उत्तरों के रूप में 3 के एन समूहों में विभाजित करने के बजाय।
a = [0,1,2,3,4,5,6]
a.in_groups(2) # => [[0,1,2,3],[4,5,6,nil]]
a.in_groups(3, false) # => [[0,1,2],[3,4], [5,6]]
मुझे नहीं लगता कि एक गहरे लाल रंग का बराबर होती है, हालांकि, आप लगभग एक ही परिणाम इस जोड़कर प्राप्त कर सकते हैं करते हैं: अगर है कि आप के लिए, रेल (ActiveSupport) क्या देख रहे हैं यह भी एक विधि in_groups कहा जाता है सरल विधि:
class Array; def in_groups(num_groups)
return [] if num_groups == 0
slice_size = (self.size/Float(num_groups)).ceil
groups = self.each_slice(slice_size).to_a
end; end
a.in_groups(3) # => [[0,1,2], [3,4,5], [6]]
फर्क सिर्फ इतना है (जैसा कि आप देख सकते हैं) कि यह सब समूहों में "खाली जगह" प्रसार नहीं होगा; प्रत्येक समूह लेकिन अंतिम आकार के बराबर है, और अंतिम समूह हमेशा शेष "खाली स्थान" शेष रखता है।
अद्यतन: रूप @rimsky astutely ने कहा, उपरोक्त विधि हमेशा समूहों की सही संख्या (कभी कभी यह अंत में कई "खाली समूह" पैदा करेगा, और उन्हें बाहर छोड़) में परिणाम नहीं होगा। यहां एक अद्यतन संस्करण है, ActiveSupport's definition से नीचे दिया गया है जो समूहों की अनुरोधित संख्या को भरने के लिए अतिरिक्त फैलता है।
def in_groups(number)
group_size = size/number
leftovers = size % number
groups = []
start = 0
number.times do |index|
length = group_size + (leftovers > 0 && leftovers > index ? 1 : 0)
groups << slice(start, length)
start += length
end
groups
end
के संभावित डुप्लिकेट [(हिस्सा) एक्स तत्वों के कुछ हिस्सों में एक रूबी सरणी विभाजित करने के लिए कैसे?] (Http://stackoverflow.com/questions/2699584/how-to-split-chunk-a-ruby -एरे-इन-पार्ट्स-ऑफ-एक्स-एलिमेंट्स) –
यह दुर्भाग्यपूर्ण है कि चुने गए उदाहरण का "3 समूहों में विभाजित" और "3 तत्वों के समूहों में विभाजित" के लिए एक ही परिणाम है, यही कारण है कि आपको दो पूरी तरह से अलग जवाब मिल गए हैं। – tokland