使用 `Array.new(n, Array.new)` 创建矩阵 [英] Creating matrix with `Array.new(n, Array.new)`

查看:28
本文介绍了使用 `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"]]

当我以不同的方式声明数组时,

When I declare the array differently,

@gameboard = [[" ", " ", " "], [" ", " ", " "], [" ", " ", " "]]

我得到了这个结果:

@gameboard[0][2] = "X"
@gameboard # => [[" ", " ", "X"], [" ", " ", " "], [" ", " ", " "]]

为什么在为数组赋值时使用 Array.new 方法会导致不同的行为?

Why does using the Array.new method illicit different behavior when assigning values to the array?

推荐答案

关注代码:

@gameboard = Array.new(3, Array.new(3, " "))
@gameboard.map { |a| a.object_id }
# => [76584030, 76584030, 76584030]

表示 new(size=0, obj=nil) 方法创建一个size的数组,具有相同的ob.

means new(size=0, obj=nil) method creates an array of size, having the same ob.

但是 new(size){|索引|块 } 方法以不同的方式工作;它创建了一个 size 的数组,具有不同的 obs.

But new(size) {|index| block } method works in a different way; it creates an array of size, having different obs.

查看下面的代码:

@gameboard = Array.new(3) { Array.new(3, " ") }
@gameboard.map { |a| a.object_id }
# => [75510080, 75509920, 75509540]

以上与您的第二个代码示例相同:

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆