2017-05-01 1 views
0

var 배열이 있습니다.한 변수를 다른 변수에 복사하고 서로 독립적으로 만드는 방법

arrays = [[15, 2, 3], [9, 1, 2], [5, 3, 0]] 

새 var 정렬로 복사하십시오. 예상 결과는 내가 var에 나는 또한

arrays = [[15, 2, 3], [9, 1, 2], [5, 3, 0]] 

sorted_dup = arrays.dup 

sorted_dup.each do |i| 
    i.sort! 
end 

p arrays 
p sorted_dup 

을 시도했습니다 VAR 배열을

sorted_clone = arrays.clone 

sorted_clone.each do |i| 
    i.sort! 
end 

p arrays 
p sorted_clone 

을 변경하지 않고 분류 정렬 할 수 없습니다

[[15, 2, 3], [9, 1, 2], [5, 3, 0]] 
[[2, 3, 15], [1, 2, 9], [0, 3, 5]] 

입니다

모두 결과는 동일

입니다
[[2, 3, 15], [1, 2, 9], [0, 3, 5]] 
[[2, 3, 15], [1, 2, 9], [0, 3, 5]] 
+0

사용'지도'아마도 새로운 과제. –

+1

개체 obj0의 "딥 복사"obj1은 "obj1"을 변경해도 obj0이 변경되지 않는다는 속성을 가지고 있습니다. @ Jokester의 답변에서 알 수 있듯이 배열 배열의 전체 복사본을 만드는 것은 매우 간단합니다. 그러나 때로는 배열과 해시의 다중 레벨 중첩과 같은 복잡한 객체'obj0'의 전체 사본을 만들어야합니다. 대부분의 객체에 대해이를 수행하는 한 가지 방법은 [Marshal] (https://ruby-doc.org/core-2.4.0/Marshal.html) 모듈의 메소드를 사용하는 것입니다. obj1 = Marshal.load (Marshal .dump (obj0))'. –

답변

3

편도 할 것입니다. e-level-deeper clone, 즉 중복 된 하위 항목도 포함합니다.

arrays = [[15, 2, 3], [9, 1, 2], [5, 3, 0]] 

sorted_clone = arrays.map {|item| item.clone} 

sorted_clone.each do |i| 
    i.sort! 
end 

p arrays 
p sorted_clone 

또 다른 방법은 대신 기존 돌연변이의 새로운 객체를 생성하는 것입니다

arrays = [[15, 2, 3], [9, 1, 2], [5, 3, 0]] 

# #sort method is the not-modifying-in-place version of #sort! 
sorted_clone = arrays.map {|child| child.sort } 

p arrays 
p sorted_clone 
+0

감사합니다. 작동합니다. – Dara

관련 문제