有什么方法可以反转嵌套哈希?

Mun*_*lam 3 ruby hash

假设我们有

b = {"b"=>"c"}
Run Code Online (Sandbox Code Playgroud)

通过这样做b.invert我们可以很容易地获得结果

{"c"=>"b"}
Run Code Online (Sandbox Code Playgroud)

那是我想要尝试一些非常酷的东西的时候.假设我们有

a = {"a"=>{"b"=>"c"}}
Run Code Online (Sandbox Code Playgroud)

什么是一种相当有效的方法来实现这一目标{{"c"=>"b"}=>"a"}(在这里,我们扭转最内在hash并努力实现这一目标)

当然,最好将其扩展到n彼此之间的哈希量.我一直在寻找其他类似的问题,但没有找到任何问题.

谢谢.

小智 5

这可以通过用于反转散列的键的递归方法(以及值,如果需要)来实现.例如:

hsh = {{"c"=>"b"}=>"a"}
def recursive_invert(hsh)
    hsh.each_with_object({}) do |(k, v), inverted_hsh|
        if k.is_a? Hash
            k = recursive_invert(k)
        end
        inverted_hsh[v] = k 
    end
end
recursive_invert(hsh) # {"a"=>{"b"=>"c"}}
Run Code Online (Sandbox Code Playgroud)