删除周围的Array并在Ruby中提供一个哈希

时间:2014-01-23 09:39:10

标签: ruby hash

我有一个数组作为查询的结果:

{"name"=>[{"en"=>"Title"}, {"de"=>"Titel"}]}

我想得到这个阵列的哈希并将它们连成一个哈希

这样我的结果就是这样。

{"en"=>"Title", "de"=>"Titel"}

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用Enumerable#reduceHash#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"}