2011-06-27 25 views
34

लिए विधि लागू करें यह मेरी सरणी है:सरणी में प्रत्येक तत्व/गणनीय

array = [:one,:two,:three] 

मैं array = ['one','two','three'] पाने के लिए मेरी सरणी के सभी तत्वों को to_s विधि लागू करना चाहते हैं।

मैं यह कैसे कर सकता हूं (गणना के प्रत्येक तत्व को किसी अन्य चीज़ में परिवर्तित करना)?

+0

संभावित डुप्लिकेट [रूबी में तारों की सरणी में पूर्णांक की सरणी को कनवर्ट करें?] (Http://stackoverflow.com/questions/781054/convert-an-array-of-integers-into-an-array- ऑफ-स्ट्रिंग्स-इन-रूबी) – Nakilon

उत्तर

57

यह काम करेगा:

array.map!(&:to_s) 
+2

array.map! (&: to_s) - यह काम 1.8 में भी नहीं होगा? –

+0

यह निश्चित रूप से रूबी 1.8.7 में काम करता है। मैं इसे अपनी परियोजनाओं में पूरी तरह से उपयोग करता हूं। –

+0

प्रतीक # to_proc 1.8.6 में उपलब्ध नहीं था, लेकिन 1.8.7 में उपलब्ध है: http://apidock.com/ruby/Symbol/to_proc। मैं इसे व्यक्तिगत अनुभव से भी जानता हूं, क्योंकि मैं रेल या इसकी पुस्तकालयों का उपयोग नहीं करता हूं। –

15

आप क्रमश: map या map! उपयोग कर सकते हैं, पहले एक नई सूची वापस आ जाएगी, दूसरी सूची को संशोधित करेगा यथा-स्थान:

>> array = [:one,:two,:three] 
=> [:one, :two, :three] 

>> array.map{ |x| x.to_s } 
=> ["one", "two", "three"] 
+0

एक त्वरित और विस्तृत उत्तर के लिए धन्यवाद! –

7
  • array.map!(&:to_s) मूल सरणी को ['one','two','three']
  • array.map(&:to_s) arra देता है वाई ['one','two','three']
+0

@sawa: दरअसल, यह सच नहीं है। रुबी-ऑन-रेल वास्तव में एक प्रोग्रामिंग भाषा है, इसके बारे में रूबी के बारे में अधिक प्रश्न पूछे गए हैं। लेकिन पर्ल, सीएलयू और स्मॉलटाक की तरह, रूबी ने अपनी भाषा में सबसे अच्छे बिट्स को शामिल किया है। ;) http://xkcd.com/386/ –

+0

@ एंड्रयू ठीक है। धन्यवाद। कुछ देने से पहले मैंने अपनी टिप्पणी सही कर दी। – sawa

+0

उन लोगों के लिए जो मुझे आश्चर्यजनक रूप से उत्तर दे रहा था, @Sawa मूल रूप से पूछा गया कि क्या उत्तरकर्ता जानता था कि रूबी एक भाषा है, और रेल एक रूढ़िवादी है जो रूबी पर चलता है, क्योंकि @ सोवा ने सोचा था कि प्रतीक # to_proc केवल 1.8 में रेल था .7। –

15

यह ध्यान देने योग्य है कि यदि आप वस्तुओं की एक सरणी है आप एक अलग फोन करने वाले के साथ एक विधि में व्यक्तिगत रूप से पारित करने के लिए, इस तरह चाहते लायक है:

# erb 
<% strings = %w{ cat dog mouse rabbit } %> 
<% strings.each do |string| %> 
    <%= t string %> 
<% end %> 

आप ब्लॉक विस्तार के साथ संयुक्त method विधि का उपयोग कर सकते हैं व्यवहार सरल करने के लिए:

<%= strings.map(&method(:t)).join(' ') %> 

आप परिचित नहीं हैं, तो क्या method करता है विधि प्रतीक एक प्रोक में इसे करने के लिए पारित कर दिया साथ जुड़े समाहित है और यह देता है। एम्परसैंड इस प्रक्रिया को एक ब्लॉक में फैलाता है, जो map पर काफी अच्छी तरह से पारित हो जाता है। map की वापसी एक सरणी है, और हम शायद इसे थोड़ा और अधिक प्रारूपित करना चाहते हैं, इसलिए join

चेतावनी यह है कि Symbol#to_proc के साथ, आप सहायक विधि पर तर्क नहीं दे सकते।

+0

धन्यवाद, यह वास्तव में एक अच्छी चाल है! – antinome

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