将2 d哈希转换为1 d哈希

时间:2011-05-08 11:22:41

标签: ruby hash map

有了这个哈希:

{ "blog_namespace" : { "key" : "blog_post_1234",
                       "notice" : "Read the new blog post!" } }

将其转化为哈希的最快捷方式是什么:

{ "blog_post_1234" : "Read the new blog post!" }

我总是看到人们使用mapmerge等聪明的组合,但是如果不将两个循环嵌套在一起,就无法完全理解这一点。

2 个答案:

答案 0 :(得分:8)

这些哈希值似乎是JSON对象。如果是,请使用JSON parser将它们转换为红宝石哈希值。

hash = {"blog_namespace" => {"key" => "blog_post_1234",
                             "notice" => "Read the new blog post!"}}

Hash[hash.map {|k, v| [v["key"], v["notice"]] }]
# => {"blog_post_1234" => "Read the new blog post!"}

答案 1 :(得分:2)

这不是有效的Ruby哈希。但是考虑到它的假设(或者你将它解析成一个)并且密钥总是"blog_namespace",你可以执行以下操作:

>> Hash[[h["blog_namespace"].values]] 
#=> {"blog_post_1234"=>"Read the new blog post!"}