终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。
http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas
以上是 ruby 文档,他给出了正确的用法:
a = Array.new(2) { Hash.new }C++中定义与使用数组跟C语言中是一样的。具体定义与使用方法可以参考如下程序段:
int a[5] // 定义一个含5个元素的int类型的数组double b[5]={3.2, 3.5, 0.8, 8, 5,3} // 定义一个含5个元素的double类型的数组并初始化char c[] ="abcd" // 定义一个字符数组,并初始化a[0] = c[0] // 将字符数组的第一个字符所对应的ASCII码值赋值给数组a的第一个元素printf("%lf", b[3]) // 输出数组b的第4个元素(数组下标从0开始)
数组的创建和初始化a = Array.[](1,2,3,4)
b = Array[1,2,3,4]
c = [1,2,3,4]
d = Array.new #创建一个空数组
e = Array.new(3) #[nil,nil,nil] 初始大小3
f = Array.new(3,"xx") #["xx","xx","xx"] 初始大小3 初始值"xx"
f[0].capitalize! #=>["Xx","Xx","Xx"]
g = Array.new(3){"yy"} #=>["yy","yy","yy"]
g[0].capitalize! #=>["Yy","yy","yy"]