阵列意外多分配

时间:2018-05-09 14:12:30

标签: ruby

我有以下数组:

@master = Array.new(4, Array.new(2, Array.new()))
=> [[[], []], [[], []], [[], []], [[], []]]

我尝试使用以下内容分配最高的值:

@master[0][0] = "x"
=> "x"

但这是在进行多项任务

@master
=> [["x", []], ["x", []], ["x", []], ["x", []]]

如何仅指定第一个值?我希望得到以下数组:

@master
=> [["x", []], [[], []], [[], []], [[], []]]

2 个答案:

答案 0 :(得分:6)

通过这种方式,您可以为每个子数组使用相同的引用。试试这种方式

@master = Array.new(4) { Array.new(2) { Array.new } }

答案 1 :(得分:3)

您正在创建一个数组,并将其分配给第一个数组的每个元素;尝试运行此代码:

.validate()

输出(你的ID会有所不同):

@master.each { |e| puts e.object_id }

正如您所看到的,是完全相同的对象,因此请尝试使用70192803217260 70192803217260 70192803217260 70192803217260 ,这将为第一个数组中的每个项目创建一个新数组。