【发布时间】:2016-07-16 08:17:24
【问题描述】:
我有以下 Ruby 脚本:
arr = ['bob', 'jack', 'smith']
array_of_hashes = Array.new
hash = Hash.new
arr.each do |item|
hash.clear
hash[:name] = item
array_of_hashes << hash
end
puts array_of_hashes
这会返回一个哈希数组,其 :name 键都来自最后一个元素。
[
[0] {
:name => "smith"
},
[1] {
:name => "smith"
},
[2] {
:name => "smith"
}
]
我希望它返回以下内容,但我一直试图弄清楚为什么最后一个 Hash 元素会覆盖所有先前的数组元素:
[
[0] {
:name => "bob"
},
[1] {
:name => "jack"
},
[2] {
:name => "smith"
}
]
编辑:谢谢大家的回答。很高兴有一些不同的方法来完成同样的事情。我已经测试了每一种解决方案,每一种都很棒。我最终使用了与我的原始代码最相似的那个;但我的用例是一个简单的本地脚本——它没有用于工业规模的应用程序——在这种情况下,我可能会选择不同的解决方案。
【问题讨论】: