[英]Ruby array of hashes unexpected behaviour
我试图创建一个哈希数组,在这里我已经找到了一些很好的解决方案:
但是,当我自己尝试时,我发现了一些我不理解的行为。
在IRB中创建哈希数组:
array_hashes = Array.new(7, Hash.new)
现在,在尝试分配键时,将值对分配给数组:
array_hashes[1]["hello"] = 200
我在控制台中得到以下输出:
=>[{"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}]
在所有数组元素上重复相同的key值,当我尝试将另一个key值分配给单个数组元素时,结果相似
array_hashes[3]["world"] = 300
=>[{"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}]
谁能解释这个原因,特别是为什么即使在分配给单个元素时,哈希值也会在所有数组元素上重复出现。 谢谢!
使用的Ruby版本:1.9.3,已在Windows 7和OS X Yosemite上尝试
因为该代码的作用是重复的:
array_hashes = Array.new(7, Hash.new)
这是:
hash = Hash.new
array_hashes = [hash, hash, hash, hash, hash, hash, hash]
因此,同一对象在数组中包含7次。
但是您想做的是:
array_hashes = Array.new(7) { Hash.new }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.