Ruby 如何独立地从两个数组中删除已相互复制的元素?

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]

=>[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(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”-在哪里?您的代码中没有复制操作。