{"title"=>["111", "222", "333"], "rating"=>["1", "2", "3"], "reviews"=>["11", "22", "33"]}
我以上述格式从表格中获取数据。
现在我想迭代这个循环,以便我可以按照我的要求获得以下序列中的数据:
["111", "1", "11"], ["222", "2", "22"], ["333", "3", "33"]
实际上我必须以这种方式保存我的数据库中的每条记录,以便标题,评级和评论为我的数据库表格形成一行。
我已经尝试了很多可能的解决方案,其中包括&every; with_,索引,键值,哈希方式,但没有运气。
提前谢谢。
答案 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
选项。