2009-11-21 15 views
74

मैं सिर्फ रूबी को माफ़ी माँग रहा हूं अगर यह यहां के लिए बहुत नौसिखिया है, लेकिन मैं इसे पिकैक्स बुक से बाहर नहीं कर सकता (शायद बस पर्याप्त ध्यान से नहीं पढ़ रहा)। वैसे भी, अगर मैं तो जैसे एक सरणी है:रूबी में जब मैं इसे पुन: सक्रिय कर रहा हूं, तो मैं सरणी को कैसे संशोधित करूं?

arr = [1,2,3,4,5] 

... और मुझे करने के लिए, मान लें, 3 से सरणी में प्रत्येक मान गुणा चाहते हैं, मैं बाहर काम किया है कि कर निम्नलिखित:

arr.each {|item| item *= 3} 

... मुझे वह नहीं मिलेगा जो मैं चाहता हूं (और मैं समझता हूं कि क्यों, मैं सरणी को संशोधित नहीं कर रहा हूं)।

मुझे यह नहीं मिलता है कि इटरेटर के बाद कोड ब्लॉक के अंदर से मूल सरणी को कैसे संशोधित किया जाए। मुझे यकीन है कि यह बहुत आसान है। जगह में सरणी को संशोधित करने के

arr2 = arr.map {|item| item * 3} 

उपयोग map!:

उत्तर

118

उपयोग map वर्ष एक से एक नई सरणी बनाने के लिए करने के लिए ideone

+2

यदि आपको वास्तव में प्रत्येक तत्व को संशोधित करने की आवश्यकता है, तो नक्शा का उपयोग करके निश्चित रूप से अधिक सुरुचिपूर्ण, imho होगा। – fresskoma

+2

और यदि आप सरणी को संशोधित करना चाहते हैं तो मानचित्र का उपयोग करें! इसके बजाय –

16

:

arr.map! {|item| item * 3} 

ऑनलाइन काम कर यह देखें सरणी को सीधे संशोधित करें, arr.map! {|item| item*3} का उपयोग करें। मूल (जो अक्सर बेहतर है) के आधार पर एक नई सरणी बनाने के लिए, arr.map {|item| item*3} का उपयोग करें। वास्तव में, मैं हमेशा each का उपयोग करने से पहले दो बार सोचता हूं, क्योंकि आमतौर पर map, select या inject जैसे उच्च-आदेश फ़ंक्शन होता है जो मैं चाहता हूं।

+0

क्या होगा यदि आप एक गणना ऑपरेशन नहीं करना चाहते हैं? क्या होगा यदि आप 'arr.map! {Destructive_op}' जैसे कुछ ऐसा करना चाहते हैं, तो 'arr' को स्थायी रूप से बदलें? –

+1

@TrevorAlexander: मुझे यकीन नहीं है कि आपका क्या मतलब है। विवरण और सामान के साथ एक असली सवाल के रूप में पूछना लायक हो सकता है। – Chuck

+0

मुझे इसके बारे में सोचना होगा। बहुत संकीर्ण तत्व संशोधन के अलावा, संरचनाओं पर विनाशकारी संचालन संख्यात्मक नहीं हैं? –

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

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