मैं मान के रूप में किसी अन्य सरणी के अंदर एक सरणी को कैसे जोड़ूं और संदर्भ के रूप में नहीं? एक उदाहरण के नीचे:
a = []
m = []
i = 1
# first loop
a[0] = i
a[1] = i + 1
m << a #=> [[1,2]]
i += 1
# second loop
a[0] = i
a[1] = i + 1
m << a #=> [[2,3],[2,3]]
मुझे कुछ उम्मीद थी [[1,2],[2,3]]
बजाय।
उत्तर:
जवाब के लिए 2 № 1आप यह समझने में सक्षम हो सकते हैं कि विभिन्न वस्तुओं की आईडी की जांच करके यहाँ क्या हो रहा है।
a = []
a.object_id #=> 2164985760
m = []
i = 1
पहला लूप
a[0] = i #=> 1
a[1] = i + 1 #=> 2
a.object_id #=> 2164985760
m << a #=> [[1,2]]
m.object_id #=> 2165031720
m[0].object_id #=> 2164985760
दूसरा पाश
i += 1
a[0] = i #=> 2
a[1] = i + 1 #=> 3
a.object_id #=> 2164985760
m << a #=> [[2, 3], [2, 3]]
m.object_id #=> 2165031720
m[0].object_id #=> 2164985760
m[1].object_id #=> 2164985760
अब केवल एक बदलाव के साथ इसे फिर से कोशिश करें। जैसा कि @sawa सुझाव देता है, जोड़ें a = []
दूसरे लूप से पहले। (निम्नलिखित ऑब्जेक्ट आईडी निश्चित रूप से उपरोक्त लोगों से अलग होंगे।)
a = []
a.object_id #=> 2164690760
m = []
i = 1
पहला लूप
a[0] = i #=> 1
a[1] = i + 1 #=> 2
a.object_id #=> 2164690760
m << a #=> [[1, 2]]
m.object_id #=> 2164655180
m[0].object_id #=> 2164690760
दूसरा पाश
a = []
a.object_id #=> 2161060600
i += 1 #=> 2
a[0] = i #=> 2
a[1] = i + 1 #=> 3
a.object_id #=> 2161060600
m << a #=> [[1, 2], [2, 3]]
m.object_id #=> 2164655180
m[0].object_id #=> 2164690760
m[1].object_id #=> 2161060600
जवाब के लिए 2 № 2
पहले को बदलें m << a
साथ में m << a.dup
। यह एक प्रतिलिपि धक्का देगा (या dup
का लाइसेंस) a
पर m
, जो अलग है a
, इसलिए जब आप संशोधित करते हैं a
आपने "वस्तु को संशोधित नहीं किया है" m
। इसे देखने का एक तरीका इस प्रकार है:
a = []
m = []
m << a
a << 0
m #=> [[0]]
x = a.dup
m << x
m #=> [[0], [0]]
a << 1
m #=> [[0, 1], [0]]
x << 2
m #=> [[0, 1], [0, 2]]
उत्तर № 3 के लिए 1
सौंपना a
एक और सरणी के लिए।
m = []
i = 1
a = []
a[0] = i
a[1] = i + 1
m << a
i += 1
a = []
a[0] = i
a[1] = i + 1
m << a
जवाब के लिए 0 № 4
अगर आपको कुछ उम्मीद थी [[1,2],[2,3]]
लूपिंग के बाद, आपको संभवतः रूबी की कार्यक्षमता का उपयोग करना चाहिए .map
पाश और एक सरणी लौटने के लिए।
इस तरह से आपको मध्यवर्ती चर (या यहां तक कि, आपके उदाहरण में काउंटर) के प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं होगी:
loop_count = 2 # or whatever currently determines how many loops you make
m = (1..loop_count).map do |i|
[i, i+1]
end
m #=> [[1,2],[2,3]]