我有一些简单的现金:
old_hash = {"New"=>"0"}
我想把它转换成新的格式:
new_hash = old_hash.keys.each do |key|
hash = Hash.new
hash[key] = {count: old_hash[key]}
hash
end
但是这个代码返回给我:
["New"]
而不是:
{"New"=>{:count=>"0"}}
问题是为什么?
您混淆了块的语法和方法的语法。在您的代码中,new_hash
获得old_hash.keys
的值,这不是您想要的。
一点修改工作:
new_hash = Hash.new
old_hash.keys.each do |key|
new_hash[key] = {count: old_hash[key]}
end
这样做:
hash = Hash.new
new_hash = old_hash.keys.each do |key|
hash[key] = {count: old_hash[key]}
hash
end
hash
# => {"New"=>{:count=>"0"}}
由于您在循环中放置了hash = Hash.new
,因此每次都会创建一个新的散列。