/ / Transformar hash 2 d em hash 1 d - ruby, hash, mapa

Transformar 2 d hash em 1 d hash - ruby, hash, map

Com este Hash:

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

Qual é a maneira mais rápida de traduzir para o Hash:

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

?

Eu sempre vejo pessoas usando combinações inteligentes de map e merge etc, mas não consigo entender uma maneira de fazer isso sem aninhar dois loops.

Respostas:

8 para resposta № 1

Esses hashes parecem ser objetos JSON. Se estiverem, use um Analisador JSON para transformá-los em rubis.

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 para resposta № 2

Este não era um hash Ruby válido. Mas, considerando as suposições de que ele é (ou você o analisará em um) e que a chave sempre será "blog_namespace", você pode fazer o seguinte:

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