Преобразуйте 2 d хэш в 1 d хеш - PullRequest
2 голосов
/ 08 мая 2011

С этим хешем:

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

Какой самый быстрый способ перевести его в хэш:

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

Я всегда вижу людей, использующих умные комбинации map и merge и т. Д., Но не могу придумать способ сделать это, не вкладывая две петли вместе.

Ответы [ 2 ]

8 голосов
/ 08 мая 2011

Эти хеши выглядят как объекты JSON. Если это так, используйте JSON-анализатор , чтобы преобразовать их в рубиновые хэши.

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!"}
2 голосов
/ 08 мая 2011

Это не был действительный хэш Ruby. Но, учитывая предположения, что это так (или вы разберете его в единое целое) и что ключ всегда будет "blog_namespace", вы можете сделать следующее:

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