matrix = Array.new(2, Array.new(2, 0))
=> [[0, 0], [0, 0]]
matrix[0][0] = 5
=> 5
matrix
=> [[5, 0], [5, 0]]
为什么会这样?在修改赋值时,我得到以下结果:
matrix = [[0, 0], [0, 0]]
=> [[0, 0], [0, 0]]
matrix[0][0] = 5
=> 5
matrix
=> [[5, 0], [0, 0]]
答案 0 :(得分:3)
在第一个示例中,您将在[2, 0]
的第二个参数中传递数组对象Array.new
。主阵列将在两个位置填充相同的阵列。如果修改其中一个,则也会修改另一个位置的相同数组。
在第二个示例中,每个子数组都是不同的数组。修改其中一个不会修改另一个。