जब मैं रूबी में इसके बारे में पुनरावृत्ति कर रहा हूं, तो मैं किसी सरणी को कैसे संशोधित करूं?


88

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

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

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

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

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

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

जवाबों:


140

mapपुराने से एक नया सरणी बनाने के लिए उपयोग करें :

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

map!जगह में सरणी को संशोधित करने के लिए उपयोग करें :

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

इसे ऑनलाइन काम करते देखें: ideone


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

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

18

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


यदि आप एन्यूमरेटिंग ऑपरेशन नहीं करना चाहते हैं तो क्या होगा? क्या होगा यदि आप कुछ करना चाहते हैं जैसे arr.map!{ destructive_op}स्थायी रूप से बदलना arr?
उज्ज्वल-तारा

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

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

@TrevorAlexander: मैं अभी भी एक कठिन समय समझ रहा हूं। यदि आप किसी संरचना की सामग्री को नहीं देख सकते हैं, तो आप इसकी सामग्री को रूपांतरित नहीं कर सकते। यह लगता है कि आप एक संरचना को संशोधित करने में रुचि नहीं रखते हैं, और इसके बजाय सिर्फ एक चर असाइन करना चाहते हैं - लेकिन मुझे गलतफहमी हो सकती है।
चक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.