使用Ruby从旧散列创建新散列



我有一些简单的现金:

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,因此每次都会创建一个新的散列。

最新更新