gpt4 book ai didi

ruby - 如何更改 ruby 二维数组中的一个单元格?

转载 作者:数据小太阳 更新时间:2023-10-29 07:50:32 24 4
gpt4 key购买 nike

谁能解释一下?

def digit_block(size = 1)
col = 2 + 1*size
row = 1 + 2*size
r = []
for i in 0...col
r.push ' '
end
a = []
for i in 0...row
a.push r
end
a
end

block = digit_block
puts block.inspect
block[1][2] = 'x'
puts block.inspect

输出:

[[" ", " ", " "], [" ", " ", " "], [" ", " ", " "]]
[[" ", " ", "x"], [" ", " ", "x"], [" ", " ", "x"]]

我的理解是 block[1][2] 只改变了第 1 行第 2 列的单元格,但为什么它改变了第 2 列的所有单元格?

最佳答案

  for i in 0...row
# you are pushing the same array object to an array
a.push r
end

所以 block 中的每个元素都是同一个对象。

block[0] === block[1]  # true
block[1] === block[2] # true

更新:

您需要为每个元素创建一个新数组,您的代码可以重写如下:

def digit_block(size = 1)
Array.new(1 + 2*size){Array.new(2 + size){' '}}
end

关于ruby - 如何更改 ruby 二维数组中的一个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12852682/

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