我的ruby脚本有问题。我不知道如何转换哈希
g = { ["name1", "name2"] => [{ "email" => "adam@adam.pl" }],
["name3", "name4"] => [{ "email" => "ewa@ewa.pl" }],
["name5", "name6", "name7", "name8"] => [{ "email" => "ala@ala.pl" }] }
到哈希:
x = { "name1" => [{ "email" => "adam@adam.pl" }],
"name2" => [{ "email" => "adam@adam.pl" }],
"name3" => [{ "email" => "ewa@ewa.pl" }],
"name4" => [{ "email" => "ewa@ewa.pl" }],
"name5" => [{ "email" => "ala@ala.pl" }],
"name6" => [{ "email" => "ala@ala.pl" }],
"name7" => [{ "email" => "ala@ala.pl" }],
"name8" => [{ "email" => "ala@ala.pl" }] }
我需要拆分钥匙,例如["name1", "name2"]
并将其作为其值"name1" => [{ "email" => "adam@adam.pl" }], "name2" => [{ "email" => "adam@adam.pl" }]
的键。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
这是你可以尝试这样的结果来获得像
这样的结果h = Hash[*g.map { |keys, value| keys.map {|key| [key,value]} }.flatten]
这给了我们一个哈希
{ "name1" => { "email" => "adam@adam.pl" },
"name2" => { "email" => "adam@adam.pl" },
"name3" => { "email" => "ewa@ewa.pl" },
"name4" => { "email" => "ewa@ewa.pl" },
"name5" => { "email" => "ala@ala.pl" },
"name6" => { "email" => "ala@ala.pl" },
"name7" => { "email" => "ala@ala.pl" },
"name8" => { "email" => "ala@ala.pl" } }
在上面的值中,哈希格式也不在数组中。如果不需要,那么这可以为你工作
答案 1 :(得分:0)
试试这个:
g.each_with_object({}) do |(k, v), obj|
k.each { |e| obj[e] = v }
end
与其他解决方案的性能比较:
# user system total real
# each_with_object...
# separate_keys1(1_000_000 times): 9.765000 0.000000 9.765000 ( 9.908535)
# Hash[]...
# separate_keys2(1_000_000 times): 16.505000 0.016000 16.521000 ( 16.725911)