我有这样的哈希:
h = {
type1: [1,2,3,4],
type2: [1,2,3,4],
type3: [1,2,3,4]
}
我想要这样的输出:
[[:type1,1],[:type1,2],[:type1,3],[:type1,4],[:type2,1],[:type2,2] ... ]
我不会在实际代码中使用它,因为它更容易编写,理解和阅读简单的块语句,但出于好奇的缘故。什么是非常红宝石的方式,如果需要,无视任何性能问题。
答案 0 :(得分:3)
以下是另一种方法:
h.flat_map {|k, v| [k].product v}
答案 1 :(得分:2)
h.flat_map{|k, a| a.map{|v| [k, v]}}
编辑:我意识到它与@max pleaner的答案相同。
Edit2:不,不是。
答案 2 :(得分:0)
您可以使用嵌套地图:
h.map do |key, array_value|
array_value.map do |item|
[key, item]
end
end
用法:
irb(main):009:0> h = { a: [1,2,3], b: [4,5,6] }
=> {:a=>[1, 2, 3], :b=>[4, 5, 6]}
irb(main):010:0> h.map do |key, array_value|
irb(main):011:1* array_value.map do |item|
irb(main):012:2* [key, item]
irb(main):013:2> end
irb(main):014:1> end
=> [[[:a, 1], [:a, 2], [:a, 3]], [[:b, 4], [:b, 5], [:b, 6]]]
irb(main):015:0>
我最了解keys
和values
方法做同样的事情:
result = []
h.values.each_with_index do |array, idx|
array.each do |item|
result[h[h.keys[idx]]] = item
end
end