gpt4 book ai didi

ruby - 为什么我的 2-D Ruby 数组的多个值发生了变化,尽管只更改了其中之一?

转载 作者:行者123 更新时间:2023-12-02 01:26:49 24 4
gpt4 key购买 nike

我有以下代码

visited = [[false]*4] * 3

它显示了二维数组

[[false, false, false, false], [false, false, false, false], [false, false, false, false]]

现在我希望更改第 1 行第 2 列的元素,如下所示:

[[false, false, false, false], [false, false, false, false], [false, false, false, false]]
^

所以我做了以下事情:

visited[1][2] = 1

但是现在当我检查二维数组时,我得到以下输出:

puts visited.inspect
> [[false, false, 1, false], [false, false, 1, false], [false, false, 1, false]]

我似乎无法弄清楚为什么同一列索引处的所有行都填充为 1?

编辑:我尝试通过手动输入所有元素(不乘以数组)来初始化我的数组visited,并且效果很好。我想知道为什么会这样呢?如果这不是这样做的正确约定,我深表歉意,我来自 Python 背景。

最佳答案

您对同一个数组有三个引用。其中一个的变化就是所有三个的变化,因为根本不存在三个。

这可以通过使用#object_id看到。

irb(main):005:0> visited = [[false]*4] * 3
=> [[false, false, false, false], [false, false, false, false], [false, false, false, false]]
irb(main):006:0> visited.map(&:object_id)
=> [70221746802920, 70221746802920, 70221746802920]

现在考虑:

irb(main):008:0> visited = 3.times.map { [false] * 4 }
=> [[false, false, false, false], [false, false, false, false], [false, false, false, false]]
irb(main):009:0> visited.map(&:object_id)
=> [70221746635240, 70221746635200, 70221746635160]

所有三个数组都有唯一的对象 ID。

irb(main):010:0> visited[0][2] = 42
=> 42
irb(main):011:0> visited
=> [[false, false, 42, false], [false, false, false, false], [false, false, false, false]]

关于ruby - 为什么我的 2-D Ruby 数组的多个值发生了变化,尽管只更改了其中之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74354968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com