sin*_*ity 3 ruby arrays hash loops
我有以下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
Run Code Online (Sandbox Code Playgroud)
这将返回一个哈希数组,其中:name键全部来自最后一个元素.
[
[0] {
:name => "smith"
},
[1] {
:name => "smith"
},
[2] {
:name => "smith"
}
]
Run Code Online (Sandbox Code Playgroud)
我希望它能返回以下内容,但我不知道为什么最后一个Hash元素会覆盖所有以前的数组元素:
[
[0] {
:name => "bob"
},
[1] {
:name => "jack"
},
[2] {
:name => "smith"
}
]
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢大家的回答.很高兴有一些不同的方法来完成同样的事情.我测试了每个解决方案,每个解决方案都很棒.我最终使用的是与原始代码最相似的那个; 但我的用例是一个简单的本地脚本 - 它不是在工业大小的应用程序中使用 - 在这种情况下,我可能会选择不同的解决方案.
仔细查看您的代码,您将看到您只创建了一个单独的实例Hash.你的迭代器不断吹嘘早期的工作.clear,将元素设置为当前迭代,并将对一个Hash对象的引用添加到不同的数组位置array_of_hashes.但是在一天结束时,它们都指向同一个Hash对象,并且该Hash对象仅包含您放入其中的最后一个对象.
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |