Ruby 将数组作为值推送到另一个数组中

Ruby 将数组作为值推送到另一个数组中,ruby,arrays,immutability,Ruby,Arrays,Immutability,如何将一个数组作为值而不是引用附加到另一个数组中?下面是一个示例: 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]] a=[] m=[] i=1 #第一圈 a[0]=i a[1]=i+1 m[[1,2]] i+

如何将一个数组作为值而不是引用附加到另一个数组中?下面是一个示例:

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]]
a=[]
m=[]
i=1
#第一圈
a[0]=i
a[1]=i+1
m[[1,2]]
i+=1
#第二圈
a[0]=i
a[1]=i+1
m[[2,3],[2,3]]

我期望类似于
[[1,2],[2,3]]
的内容。

替换第一个
m替换第一个
m将
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
m=[]
i=1
a=[]
a[0]=i
a[1]=i+1

m将
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
m=[]
i=1
a=[]
a[0]=i
a[1]=i+1

m通过检查各种对象的id,您可以更好地了解这里发生了什么

a = []
a.object_id    #=> 2164985760
m = []
i = 1
第一圈

第一圈

a[0]=i#=>1
a[1]=i+1#=>2
a、 对象id#=>2164690760
m[[1,2]]
m、 对象id#=>2164655180
m[0]。对象_id#=>2164690760
第二圈

a=[]
a、 对象id#=>2161060600
i+=1#=>2
a[0]=i#=>2
a[1]=i+1#=>3
a、 对象id#=>2161060600
m[[1,2],[2,3]]
m、 对象id#=>2164655180
m[0]。对象_id#=>2164690760
m[1].对象id#=>2161060600

通过检查各种对象的id,您可以更好地了解这里发生了什么

a = []
a.object_id    #=> 2164985760
m = []
i = 1
第一圈

第一圈

a[0]=i#=>1
a[1]=i+1#=>2
a、 对象id#=>2164690760
m[[1,2]]
m、 对象id#=>2164655180
m[0]。对象_id#=>2164690760
第二圈

a=[]
a、 对象id#=>2161060600
i+=1#=>2
a[0]=i#=>2
a[1]=i+1#=>3
a、 对象id#=>2161060600
m[[1,2],[2,3]]
m、 对象id#=>2164655180
m[0]。对象_id#=>2164690760
m[1].对象id#=>2161060600

如果您希望在循环后得到类似于
[[1,2],[2,3]]
的结果,那么您可能应该使用
.map
的Ruby功能来循环并返回数组

这样,您就不必担心管理中间变量(甚至示例中的计数器):


如果您希望在循环后得到类似于
[[1,2],[2,3]]
的结果,那么您可能需要使用
.map
的Ruby功能来循环并返回数组

这样,您就不必担心管理中间变量(甚至示例中的计数器):

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
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
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]]