迭代数组的哈希值

时间:2016-03-16 07:16:08

标签: ruby-on-rails arrays ruby hash

{"title"=>["111", "222", "333"], "rating"=>["1", "2", "3"], "reviews"=>["11", "22", "33"]}


我以上述格式从表格中获取数据。

现在我想迭代这个循环,以便我可以按照我的要求获得以下序列中的数据:

["111", "1", "11"], ["222", "2", "22"], ["333", "3", "33"]

实际上我必须以这种方式保存我的数据库中的每条记录,以便标题,评级和评论为我的数据库表格形成一行。
我已经尝试了很多可能的解决方案,其中包括&every; with_,索引,键值,哈希方式,但没有运气。
提前谢谢。

2 个答案:

答案 0 :(得分:5)

假设Hash中的每个值都是一个长度相同的数组,transpose数组hash.values

hash = {"title"=>["111", "222", "333"], "rating"=>["1", "2", "3"], "reviews"=>["11", "22", "33"]}
hash.values
#=> [["111", "222", "333"], ["1", "2", "3"], ["11", "22", "33"]]
hash.values.transpose
#=> [["111", "1", "11"], ["222", "2", "22"], ["333", "3", "33"]]

答案 1 :(得分:3)

虽然transpose解决方案非常好,但是当并非所有值数组都具有相同数量的元素时,它将会出错。这仍然有效(用nil替换缺少的元素):

h.values.reduce(:zip).map(&:flatten)
#=> [["111", "1", "11"], ["222", "2", "22"], ["333", "3", "33"]]

如果您知道输入格式正确,请转到transpose选项。