我有一个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]]
答案 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