如何将一个变量复制到另一个变量中并使它们彼此独立

时间:2017-05-01 02:35:04

标签: ruby

我有一个var数组。

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

将其复制到新的var sorted中。预期结果是

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

我无法在不更改var数组的情况下对var进行排序

sorted_clone = arrays.clone

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

p arrays
p sorted_clone

我也试过

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

两者的结果相同

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

1 个答案:

答案 0 :(得分:3)

一种方法是进行一级深度克隆,即重复子项。

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