/ / नक्शा का व्यवहार और प्रत्येक 2 डी सरणी के लिए - रूबी, बहुआयामी-सरणी

नक्शा का व्यवहार और प्रत्येक 2 डी सरणी के लिए - रूबी, बहुआयामी-सरणी

जबकि each किसी दिए गए पंक्ति के मानों को 2 डी सरणी में परिवर्तित नहीं करता है (विपरीत map):

test_array = [[0,0],[0,0],[0,0]]

test_array[0].each {|e| e = 1}
test_array # => [[0, 0], [0, 0], [0, 0]]

test_array[0].map! {|e| e = 1}
test_array # => [[1, 1], [0, 0], [0, 0]]

each किसी दिए गए कॉलम के मानों को बदलता है (एक तरफ से अलग map):

test_array = [[0,0],[0,0],[0,0]]

test_array.each {|row| row[0] = 2}
test_array # => [[2, 0], [2, 0], [2, 0]]

test_array.map! {|row| row[0] = 2}
test_array # => [2, 2, 2]

क्या कोई समझा सकता है कि क्या हो रहा है?

उत्तर:

जवाब के लिए 3 № 1

ऐसा इसलिए है क्योंकि रूबी में, पैरामीटर "ऑब्जेक्ट रेफरेंस द्वारा पास किए जाते हैं"।

नीचे दिए गए मामले में,

test_array.each {|row| row[0] = 2}

row अंदर एक सरणी को संदर्भित करता है test_array, और इसकी सामग्री को संशोधित करने में प्रतिबिंबित होगा test_array। यह उप-सरणी में मौजूद है test_array.

नीचे दिए गए मामले में,

test_array[0].each {|e| e = 1}

e में एक पूर्णांक को संदर्भित करता है array[0], और यह एक अलग पूर्णांक को इंगित करने से मूल मान को प्रभावित नहीं करेगा क्योंकि हम इसमें मौजूद पूर्णांक मानों को म्यूट नहीं कर रहे हैं array[0].

यहां अधिक जानकारी: रूबी संदर्भ या मूल्य से गुजरती है?

आपकी क्वेरी के बारे में mapकृपया ध्यान दें कि आप इसका उपयोग कर रहे हैं map!, जो ऑब्जेक्ट को म्यूटेट करेगा जिस पर विधि कहा जाता है, जबकि map मूल्य देता है।

map! {|item| block } → ary

प्रत्येक तत्व के लिए दिए गए ब्लॉक को एक बार आमंत्रित करता है self, ब्लॉक द्वारा लौटाए गए मान के साथ तत्व को बदलना।

का आउटपुट map के रूप में वापस किया गया है:

test_array.map {|row| row[0] = 2}
test_array # => [[2, 0], [2, 0], [2, 0]]

test_array के उत्पादन के साथ बदल दिया गया है map:

test_array.map! {|row| row[0] = 2}
test_array # => [2, 2, 2]