ruby-on-rails 在Ruby中将散列数组转换为ONE散列

b4lqfgs4  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(199)

我有一个散列数组,其中的数组看起来像这样:

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"]}
]

如果可能的话,我想做的是把它转换成ONE hash,其中每个key=〉value对都是从每个hash的值中取出来的。我不认为我解释得很好,所以我的意思是:

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

我一直在搜索Stack Overflow和Google寻找各种方法,但是在这个过程中我把自己弄糊涂了。有什么想法可以实现这个吗?

7gyucuyw

7gyucuyw1#

我认为解决方案的关键是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)]
nzk0hqpo

nzk0hqpo2#

试试这个

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" }
00jrzges

00jrzges3#

另一种可能是使用Enumerable#inject和Hash#merge的组合:

result.inject({}) do |acc, hash|
   acc.merge({hash['id_t'].first => hash['transcript_t'].first})
end
=> { "1"=>"I am a transcript ONE",
     "2"=>"I am a transcript TWO",
     "3"=>"I am a transcript THREE" }

这最小化了对[]-构造的需要,以及; acc的额外显式返回附录。

相关问题