首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维数组,推到一个数组中会出现在所有数组中吗?

二维数组,推到一个数组中会出现在所有数组中吗?
EN

Stack Overflow用户
提问于 2014-01-10 18:13:19
回答 2查看 143关注 0票数 1

我对红宝石很陌生,所以我很明显是误会了。我打算创建一个大小为2的数组,其中每个元素本身都是一个数组,然后将项推到一个或另一个子数组:

代码语言:javascript
复制
#!/usr/bin/env ruby
arr = Array.new(2, Array.new)

puts 'default, no entries:'
arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s }
puts ''

puts 'adding "kitty" to arr[0]:'
arr[0].push('kitty') # add an element to the sub-array at arr[0]
arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s }
puts ''

puts 'adding "doggy" to arr[1]:'
arr[1].push('doggy') # add an element to the sub-array at arr[1]
arr.each_with_index { |a, i| puts 'arr[' + i.to_s + '] = ' + a.to_s }

产出:

代码语言:javascript
复制
default, no entries:
arr[0] = []
arr[1] = []

adding "kitty" to arr[0]:
arr[0] = ["kitty"]
arr[1] = ["kitty"]

adding "doggy" to arr[1]:
arr[0] = ["kitty", "doggy"]
arr[1] = ["kitty", "doggy"]

我希望arr.push()在arr添加元素,这是错误的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 18:18:43

arr = Array.new(2, Array.new)相同的数组分配给两个新对象。

如果您使用块表单,您将得到两个独立的数组,正如您所期望的:

代码语言:javascript
复制
arr = Array.new(2) { Array.new }
票数 4
EN

Stack Overflow用户

发布于 2014-01-10 18:18:02

似乎您正在创建一个数组,其中每个元素都是对同一个数组对象的引用:

代码语言:javascript
复制
arr = Array.new(2, Array.new)
#=> [[], []]
arr[0].push(1)
#=> [1]
arr
#=> [[1], [1]]

相反,做

代码语言:javascript
复制
arr = [[],[]]
#=> [[], []]
arr[0].push(1)
#=> [1]
arr
#=> [[1], []]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21051442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档