红宝石。哈希数组的“魔法”

时间:2013-07-20 17:17:13

标签: ruby arrays

社区,如何实现方法“m_met”,它将重组哈希数组(具有相同的大小和相同的“键”)到第1个元素将是“键”数组和其余 - “值”的形式每个哈希。
例如:

m_met([{a: 1, b: 2, c: 3 }, {a: 4, b: 5, c: 6}]) 
# => [[:a, :b, :c], [1, 2, 3], [4, 5, 6]]

谢谢!

2 个答案:

答案 0 :(得分:2)

h = [{a: 1, b: 2, c: 3 }, {a: 4, b: 5, c: 6}]
h.flat_map { |j| [j.keys, j.values] }.uniq
# => [[:a, :b, :c], [1, 2, 3], [4, 5, 6]]

<强>更新

h = [{a: 1, b: 2, c: 3 }, {a: 1, b: 2, c: 3}]
[h.first.keys].concat(h.map(&:values))
# => [[:a, :b, :c], [1, 2, 3], [1, 2, 3]]

h = [{a: 1, b: 2, c: 3 }, {a: 4, b: 5, c: 6}]
[h.first.keys].concat(h.map(&:values))
# => [[:a, :b, :c], [1, 2, 3], [4, 5, 6]]

答案 1 :(得分:2)

没有额外的假设,它可能是这样的:

hs = [{a: 1, b: 2, c: 3 }, {a: 4, b: 5, c: 6}]
ks = hs.first.keys
[ks] + hs.map{ |h| h.values_at(*ks)}

更新坦率地说我更喜欢第二行(所以我不需要等于什么)

ks = hs.flat_map(&:keys).uniq