Ruby中二维数组插入元素的问题

浏览:42日期:2022-10-22

问题描述

我想在某一个数组中插入元素,代码如下:

foo = Array.new(10,[])foo[0] << 1puts foo.to_s

输出的结果是

[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

这是为什么啊?

如果是哈希的话

bar = Hash.new([])bar[0] << 1puts bar.to_sputs bar[1].to_s

输出的结果是

{}[1]

更加摸不着头脑了……求指教……

问题解答

回答1:

foo = Array.new(10,[])

这个方法创建的10个空数组是同一个Object

如果想要创建不同Object的话,请使用以下方法。

foo = Array.new(10) { Array.new }

参考:http://ruby-doc.org/core-2.0.0/Array.html#label-Creating+Arrays

回答2:

补楼上, 所有object_id是一样的foo.map(&:object_id) => [9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880, 9298880]

回答3:

我一般都是用map.(1..10).map {[]}

不过我还是疑问,为什么还是同一个 Array 呢?

相关文章: