2d数组,推送到一个数组显示在所有数组?

我是ruby的新手,所以我显然误解了一些东西。 我打算创建一个大小为2的数组,其中每个元素本身就是一个数组,然后将项目推送到一个或另一个子数组:

#!/usr/bin/env ruby arr = Array.new(2, Array.new) puts 'default, no entries:' arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s } puts '' puts 'adding "kitty" to arr[0]:' arr[0].push('kitty') # add an element to the sub-array at arr[0] arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s } puts '' puts 'adding "doggy" to arr[1]:' arr[1].push('doggy') # add an element to the sub-array at arr[1] arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s } 

输出:

 default, no entries: arr[0] = [] arr[1] = [] adding "kitty" to arr[0]: arr[0] = ["kitty"] arr[1] = ["kitty"] adding "doggy" to arr[1]: arr[0] = ["kitty", "doggy"] arr[1] = ["kitty", "doggy"] 

我希望arr [0] .push()在arr [0] [0]添加元素,这是错的吗?

arr = Array.new(2, Array.new)为两个新对象分配相同的数组。

如果您使用块forms,您将获得两个单独的数组:

 arr = Array.new(2) { Array.new } 

看来你正在创建一个数组,其中每个元素都是对同一个数组对象的引用:

 arr = Array.new(2, Array.new) #=> [[], []] arr[0].push(1) #=> [1] arr #=> [[1], [1]] 

相反,做

 arr = [[],[]] #=> [[], []] arr[0].push(1) #=> [1] arr #=> [[1], []]