在Ruby中将哈希数组转换为ONE哈希

时间:2013-01-09 21:06:23

标签: ruby-on-rails ruby

我有一个包含数组的哈希数组,如下所示:

result = [
  {"id_t"=>["1"], "transcript_t"=>["I am a transcript ONE"]},
  {"id_t"=>["2"], "transcript_t"=>["I am a transcript TWO"]},
  {"id_t"=>["3"], "transcript_t"=>["I am a transcript THREE"]}
]

我想要做的是,如果可能的话,将其转换为使其成为一个哈希,其中每个键=>值对从每个哈希的值中获取。我不认为我解释得那么好,所以这就是我的意思:

end_result = {
  "1"=>"I am a transcript ONE",
  "2"=>"I am a transcript TWO",
  "3"=>"I am a transcript THREE"
}

我一直在搜索Stack Overflow和谷歌的各种方法,但我在这个过程中让自己感到困惑。关于如何实现这一点的任何想法?

2 个答案:

答案 0 :(得分:12)

我认为解决方案的关键是Hash[],它将根据键/值数组创建一个哈希,即

Hash[[["key1", "value1"], ["key2", "value2"]]]
#=> {"key1" => "value1", "key2" => "value2"}

只需添加一组map即可获得解决方案!

result = [
  {"id_t"=>["1"], "transcript_t"=>["I am a transcript ONE"]},
  {"id_t"=>["2"], "transcript_t"=>["I am a transcript TWO"]},
  {"id_t"=>["3"], "transcript_t"=>["I am a transcript THREE"]}
]
Hash[result.map(&:values).map(&:flatten)]

答案 1 :(得分:0)

试试这个

result.inject({}){|acc, hash| acc[hash.values[0][0]] = hash.values[1][0]; acc }

=> { "1"=>"I am a transcript ONE", 
     "2"=>"I am a transcript TWO",
     "3"=>"I am a transcript THREE" }