创建具有`Array.new(N,Array.new)矩阵` [英] Creating matrix with `Array.new(n, Array.new)`
本文介绍了创建具有`Array.new(N,Array.new)矩阵`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我通过以下操作创建一个数组:
I created an array by doing the following:
@gameboard = Array.new(3, Array.new(3, " "))
我试图分配一个值,像这样,我得到这个:
I tried to assign a value like so, and I got this:
@gameboard[0][2] = "X"
@gameboard #=> [[" ", " ", "X"], [" ", " ", "X"], [" ", " ", "X"]]
在我不同的声明数组,
@gameboard = [[" ", " ", " "], [" ", " ", " "], [" ", " ", " "]]
我得到这样的结果:
I get this result:
@gameboard[0][2] = "X"
@gameboard # => [[" ", " ", "X"], [" ", " ", " "], [" ", " ", " "]]
为什么到数组赋值时,使用 Array.new
方法非法不同的行为?
推荐答案
按照code:
@gameboard = Array.new(3, Array.new(3, " "))
@gameboard.map { |a| a.object_id }
# => [76584030, 76584030, 76584030]
新(大小= 0,则obj =无)
方法创建尺寸
,具有相同的 OB的数组
。
但 新(尺寸){|首页|块}
方法以不同的方式工作;它创建数组尺寸
,具有不同 OBS
。
查看code以下:
@gameboard = Array.new(3) { Array.new(3, " ") }
@gameboard.map { |a| a.object_id }
# => [75510080, 75509920, 75509540]
以上是一样的你的第二个code例如:
The above is the same as your second code example:
@gameboard = [[" ", " ", " "], [" ", " ", " "], [" ", " ", " "]]
@gameboard.map { |a| a.object_id }
# => [80194090, 80193400, 80193080]
如果您更改或 @gameboard
的第一个元素数组的索引 1
更新的价值,它不会影响所有其他内部数组元素。
If you change or update the the value at index 1
of the first element array of @gameboard
, it wouldn't affect all other inner array elements.
@gameboard = Array.new(3) { Array.new(3, " ") }
@gameboard[0][1] = 2
@gameboard
# => [[" ", 2, " "], [" ", " ", " "], [" ", " ", " "]]
这篇关于创建具有`Array.new(N,Array.new)矩阵`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文