Ruby 如何独立地从两个数组中删除已相互复制的元素?
a=[1,2,3] =>[1,2,3] b=a =>[1,2,3] b、 删除(1) =>1 b =>[2,3] a =>[2,3]Ruby 如何独立地从两个数组中删除已相互复制的元素?,ruby,Ruby,a=[1,2,3] =>[1,2,3] b=a =>[1,2,3] b、 删除(1) =>1 b =>[2,3] a =>[2,3] 数组A已给出[1,2,3]个值,数组A已复制到数组B 然后,每当我从数组B中删除一个元素时,该元素也会从数组a中删除 如果我从数组B中删除元素1,它也会从数组A中删除 如何避免这种情况,如何分别从这些数组中删除元素?您可以使用创建数组的副本 a = [1,2,3] => [1, 2, 3] b = a.dup => [1, 2, 3] a.delete
数组A已给出[1,2,3]个值,数组A已复制到数组B 然后,每当我从数组B中删除一个元素时,该元素也会从数组a中删除 如果我从数组B中删除元素1,它也会从数组A中删除 如何避免这种情况,如何分别从这些数组中删除元素?您可以使用创建数组的副本
a = [1,2,3]
=> [1, 2, 3]
b = a.dup
=> [1, 2, 3]
a.delete(1)
=> 1
a
=> [2, 3]
b
=> [1, 2, 3]
编辑:
至于原因,当您指定
b=a
时,您指定b
作为对a
的引用。这意味着两个变量引用相同的基础对象。使用dup
我们强制Ruby创建a
的副本 您正在b中创建浅层副本,因此不会复制内容。要复制它们,请使用Object::clone:b=a.clone
非常感谢,它起了作用,我能知道为什么会发生吗?关于克隆vs dup的微妙之处:更新了答案:)@CarySwoveland谢谢你的提示,我会删除它们。“阵列a已复制到阵列b”-在哪里?您的代码中没有复制操作。