【问题标题】:How to delete a element from two arrays independently which has been copied from one another?如何从彼此复制的两个数组中独立删除一个元素?
【发布时间】:2017-05-19 05:29:46
【问题描述】:

a = [1,2,3]

=> [1, 2, 3]

b = a

=> [1, 2, 3]

b.delete(1)

=> 1

b

=> [2, 3]

一个

=> [2, 3]

数组 A 已给出 [1,2,3] 值,数组 A 已复制到数组 B

然后,每当我从 Array B 中删除一个元素时,该元素也会从 Array A 中删除

例如:如果我从数组 B 中删除元素 1,它也会从数组 A 中删除..

如何避免这种情况,如何分别从这些数组中删除一个元素?

【问题讨论】:

  • "阵列 A 已复制到阵列 B" – 在哪里?您的代码中没有复制操作。

标签: ruby


【解决方案1】:

您可以使用dup 创建数组的副本。

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 的副本。

【讨论】:

  • 非常感谢,它成功了,我能知道为什么会这样吗?
  • 关于 clone vs dup 的微妙之处:stackoverflow.com/questions/10183370/…
  • 更新了答案:)
  • @CarySwoveland 感谢您的留言,我会删除它们。
【解决方案2】:

您正在 b 中创建浅拷贝,因此不会复制内容。要复制它们,请使用 Object::clone: b = a.clone

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2018-10-30
    相关资源
    最近更新 更多