我想更改二维数组的值。
这是数组:
class Test
def initialize
@single = [1,2,3,4,5,6,7,8,9,10]
@double = [@single, @single, @single, @single]
end
def changeValue i, j
@double[i][j] = nil
end
def showDouble
return @double
end
end
我想更改double数组(二维数组)中的值。如果我想在第一个数组中更改9的值,那么我应该这样做:
test = Test.new
test.changeValue 0, 8
puts test.showDouble
当我这样做时,每个数组的值为9。我只想在一个数组中更改它。欢迎任何帮助! :)
答案 0 :(得分:4)
数组@double
实际上包含对相同数组@single
的四个引用,这就是您获得所描述行为的原因。
初始化@double = [@single.clone, @single.clone, @single.clone, @single.clone]
以获得独立(但最初相同)的子阵列。
答案 1 :(得分:3)
下面
@double = [@single, @single, @single, @single]
您使用相同的对象填充数组,在changeValue
中进行更改,因此@double
的更改次数为4次。如果您想要4个不同的对象,请将@double
as:
@double = [@single.dup, @single.dup, @single.dup, @single.dup]