2011-10-05 19 views
12

में X.times से एक सरणी वापस करने का क्लीन तरीका मैं अक्सर एक बार एक्स बार पर एक क्रिया करना चाहता हूं, फिर उस नंबर के अलावा परिणाम लौटाता हूं। आमतौर पर जो कोड मैं लिखता हूं वह निम्नलिखित है:रूबी

def other_participants 
    output =[] 
    NUMBER_COMPARED.times do 
     output << Participant.new(all_friends.shuffle.pop, self) 
    end 
    output 
    end 

क्या ऐसा करने का कोई क्लीनर तरीका है? fine manual से

def other_participants 
    NUMBER_COMPARED.times.each_with_object([]) do |i, output| 
    output << Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

:

+0

मैं कसम खाता हूँ इस प्रतिष्ठा के लिए नहीं है, लेकिन मैं वास्तव में लगता है कि आप गलत जवाब स्वीकार कर लिया। कलेक्ट वास्तव में उपयोग करने के लिए वास्तव में सही है। यहां तक ​​कि यदि आप एक और जवाब देते हैं तो एक स्वीकार करते हैं, मुझे सच में लगता है कि आपको कोई नक्शा स्वीकार करना चाहिए/जब कोई और आता है तो इस प्रश्न को देखता है। – xaxxon

+0

मैंने प्रयोग के बाद खुद को एक ही चीज़ सोचा था इसलिए मैंने –

उत्तर

19

लगता है जैसे आप मानचित्र/संग्रह का उपयोग कर सकते हैं (वे संख्यात्मक पर समानार्थी हैं)। यह मानचित्र/संग्रह के माध्यम से प्रत्येक पुनरावृत्ति की वापसी होने वाली सामग्री के साथ एक सरणी देता है।

def other_participants 
    NUMBER_COMPARED.times.collect do 
    Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

आपको किसी अन्य चर या स्पष्ट वापसी कथन की आवश्यकता नहीं है।

http://www.ruby-doc.org/core/Enumerable.html#method-i-collect

6

आप each_with_object इस्तेमाल कर सकते हैं

each_with_object (obj) {| (* args), memo_obj | ...} → obj
each_with_object (obj) → an_enumerator

दोहराता दिया एक मनमाना वस्तु के साथ प्रत्येक तत्व के लिए दिए गए ब्लॉक, और शुरू में दिए गए वस्तु देता है।
यदि कोई ब्लॉक नहीं दिया गया है, तो एक गणनाकर्ता लौटाता है।

+2

इंपीरेटिव प्रोग्रामर को स्विच किया! सिलिकॉन नरक में घुमाओ! –

+2

@ एंड्रयू: मेरे लॉन बच्चे को छोड़ दो! –

0

मैं इस तरह बात कुछ सबसे अच्छा है

def other_participants 
    Array.new(NUMBER_COMPARED) { Participant.new(all_friends.shuffle.pop, self) } 
end