dhr*_*moy 1 ruby recursion hash
假设我有以下哈希或嵌套哈希:
h = { :a1 => { :b1 => "c1" },
:a2 => { :b2 => "c2"},
:a3 => { :b3 => "c3"} }
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,将哈希作为参数,并递归地将所有键(例如符号的键:a1
)转换为String(例如"a1"
).到目前为止,我已经提出了以下方法,它不起作用并返回{"a1"=>{:b1=>"c1"}, "a2"=>{:b2=>"c2"}, "a3"=>{:b3=>"c3"}}
.:
def stringify_all_keys(hash)
stringified_hash = {}
hash.each do |k, v|
stringified_hash[k.to_s] = v
if v.class == Hash
stringify_all_keys(stringified_hash[k.to_s])
end
end
stringified_hash
end
Run Code Online (Sandbox Code Playgroud)
我做错了什么以及如何将所有键转换为字符串,如下所示:
{"a1"=>{"b1"=>"c1"}, "a2"=>{"b2"=>"c2"}, "a3"=>{"b3"=>"c3"}}
Run Code Online (Sandbox Code Playgroud)
如果您ActiveSupport
已经使用它或者可以使用它,那么deep_stringify_keys就是您正在寻找的.
hash = { person: { name: 'Rob', age: '28' } }
hash.deep_stringify_keys
# => {"person"=>{"name"=>"Rob", "age"=>"28"}}
Run Code Online (Sandbox Code Playgroud)
如果你的值是字符串、数字等基本对象,那就太快了:
require 'json'
JSON.parse(JSON.dump(hash))
Run Code Online (Sandbox Code Playgroud)