Ruby在二维数组中改变值

时间:2015-01-23 15:54:12

标签: ruby arrays

我想更改二维数组的值。

这是数组:

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。我只想在一个数组中更改它。欢迎任何帮助! :)

2 个答案:

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