加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

修改二维数组ruby

发布时间:2020-12-17 03:56:45 所属栏目:百科 来源:网络整理
导读:参见英文答案 Array of Arrays in ruby,passed by reference????????????????????????????????????2个 如果我创建这个数组: a = Array.new(3,Array.new(2,0)) 它创建: = [[0,0],[0,0]] 当我尝试更改特定元素时: a[0][0] = 3 它改变了多个值: = [[3,[3,0]
参见英文答案 > Array of Arrays in ruby,passed by reference????????????????????????????????????2个
如果我创建这个数组:

a = Array.new(3,Array.new(2,0))

它创建:

=> [[0,0],[0,0]]

当我尝试更改特定元素时:

a[0][0] = 3

它改变了多个值:

=> [[3,[3,0]]

为什么会这样?我怎样才能更改特定元素?

解决方法

您必须更改将阵列( this is a known issue)初始化为此的方式:

a = Array.new(3) { Array.new(2,0) }

您的版本与此版本之间的区别在于Array.new(2,0)仅出现一次.你正在创建一个带有3个“指针”的数组到第二个数组.您可以在以下代码中看到此演示:

a = Array.new(3,0))
a.map { |a| a.object_id }
#=> [70246027840960,70246027840960,70246027840960] # Same object ids!

a = Array.new(3) { Array.new(2,0) }
a.map { |a| a.object_id }
#=> [70246028007600,70246028007580,70246028007560] # Different object ids

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读