2015-01-23 4 views
1

2 차원 배열의 값을 변경하고 싶습니다. 2 차원 배열의 루비 변경 값

배열이다

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 

I은 ​​이중 어레이 (이차원 배열)의 값을 변경할. 내가 첫 번째 배열 9의 값을 변경하려는 경우, 나는이 같은 일을 수행해야합니다

test = Test.new 
test.changeValue 0, 8 
puts test.showDouble 

나는이 작업을 수행 할 때, 다음 9의 값이 모든 배열 전무입니다. 하나의 배열로만 변경하려고합니다. 어떤 도움도 환영합니다! :)

+0

"작동하지 않음"으로 무엇을 의미하는지 설명해 주시겠습니까? 그것은 나를 위해 잘 작동합니다. – Ajedi32

+0

이것을 확인하십시오 http://stackoverflow.com/questions/1720932/create-two-dimensional-arrays-and-access-sub-arrays-in-ruby – gkolan

+0

같은 중복되지 않은 배열 ('single')을 사용할 때 double 배열의 모든 요소는'single'의 내용을 한 행에 변경하면 다른 행에서도 변경됩니다 (실제로는 같은 객체이기 때문에). – Ajedi32

답변

3

배열 배열 @single에 실제로 네 개의 참조가 포함되어있어 사용자가 설명하는 동작을 얻게됩니다.

@double = [@single.clone, @single.clone, @single.clone, @single.clone]을 초기화하여 독립적 인 (그러나 초기에는 동일한) 서브 어레이를 얻습니다. 여기

+0

고맙습니다,이 작품! – Ocmer

3

@double = [@single, @single, @single, @single] 

changeValue로 다시 변경, 동일한 객체 배열을 작성 그래서 @double 4 회 변경되고있다. 4 가지 다른 객체가 필요하다면, @double을 다음과 같이 초기화하십시오 :

@double = [@single.dup, @single.dup, @single.dup, @single.dup] 
+0

고맙습니다. 이것도 작동합니다! :) – Ocmer