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


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

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

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

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

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

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


76
2017-11-21 00:07


मूल




जवाब:


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

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

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

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

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


121
2017-11-21 00:09



यदि आपको वास्तव में प्रत्येक तत्व को संशोधित करने की आवश्यकता है, तो नक्शा का उपयोग करना निश्चित रूप से अधिक सुरुचिपूर्ण होगा, imho। - fresskoma
और यदि आप सरणी को संशोधित करना चाहते हैं तो मानचित्र का उपयोग करें! बजाय - Yoann Le Touche


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


16
2017-11-21 00:44



क्या होगा यदि आप एक गणित ऑपरेशन नहीं करना चाहते हैं? क्या होगा यदि आप बस कुछ करना चाहते हैं arr.map!{ destructive_op} स्थायी रूप से बदलने के लिए arr? - bright-star
@TrevorAlexander: मुझे यकीन नहीं है कि आपका क्या मतलब है। विवरण और सामान के साथ एक असली सवाल के रूप में पूछना लायक हो सकता है। - Chuck
मुझे इसके बारे में सोचना होगा। बहुत संकीर्ण तत्व संशोधन के अलावा, संरचनाओं पर विनाशकारी संचालन संख्यात्मक नहीं हैं? - bright-star
@TrevorAlexander: मुझे अभी भी मुश्किल समय समझ रहा है। यदि आप किसी संरचना की सामग्री को नहीं देख पा रहे हैं, तो आप इसकी सामग्री को बदल नहीं सकते हैं। इस तरह की आवाज़ें जैसे कि आप संरचना को संशोधित करने में रूचि नहीं रखते हैं, और इसके बजाय सिर्फ एक चर निर्दिष्ट करना चाहते हैं - लेकिन मुझे गलतफहमी हो सकती है। - Chuck


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

5
2018-06-06 12:57