【问题标题】:How to ensure nested arrays don't update in Ruby如何确保嵌套数组不会在 Ruby 中更新
【发布时间】:2020-05-11 05:26:56
【问题描述】:

当我在 Ruby 中运行这段代码时:

outerarr = []
innerarr = [1]
outerarr.push(innerarr)
innerarr[0] += 1

那么outerarr 将是[[2]]。

我明白为什么会发生这种情况,但是有没有办法“断开”innerarr,可以这么说,以便在更新 innerarr 时,outerarr 不会改变(即保持为 [[1]])?

谢谢。

【问题讨论】:

  • 数组是第一类对象。当一个数组(对象)引用另一个数组(对象),并且当引用改变状态时,它会被反映。这是面向对象编程的非常基本的规则。
  • 你想保持innerarr 可以改变只是outerarr 不应该改变吗?或者你想确保innerarr一旦被推入outerarr就不能再更改?运行innerarr[0] += 1innerarrouterarr 的预期输出是多少?

标签: arrays ruby


【解决方案1】:

如果您创建原始数组的副本,它应该可以工作。例如 outerarr.push(innerarr.dup)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2019-06-08
    • 2020-10-09
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多