我有一个数组作为查询的结果:
{"name"=>[{"en"=>"Title"}, {"de"=>"Titel"}]}
我想得到这个阵列的哈希并将它们连成一个哈希
这样我的结果就是这样。
{"en"=>"Title", "de"=>"Titel"}
谢谢
答案 0 :(得分:1)
您可以使用Enumerable#reduce
和Hash#merge!
方法:
hash = {"name"=>[{"en"=>"Title"}, {"de"=>"Titel"}]}
hash['name'].reduce({}) { |result, h| result.merge!(h) }
# => {"en"=>"Title", "de"=>"Titel"}
或者使用Enumerable#each_with_object
方法稍微提高效率:
hash['name'].each_with_object({}) { |h, result| result.merge!(h) }
# => {"en"=>"Title", "de"=>"Titel"}
比较:
require 'fruity'
names = [{"en"=>"Title"}, {"de"=>"Titel"}]
compare do
reduce do
names.reduce({}) { |result, h| result.merge!(h) }
end
each_with_object do
names.each_with_object({}) { |h, result| result.merge!(h) }
end
end
结果:
Running each test 1024 times. Test will take about 1 second.
each_with_object is faster than reduce by 30.000000000000004% ± 10.0%
答案 1 :(得分:1)
简单地说:
hash = {"name"=>[{"en"=>"Title"}, {"de"=>"Titel"}]}
hash["name"].reduce(:merge) # => {"en"=>"Title", "de"=>"Titel"}