2

社区,如何实现方法“m_met”,它将重新组织散列数组(具有相同的大小和相同的“键”),其中第一个元素将是一个“键”数组,其余元素是每个散列的“值”。
例子:

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

谢谢!

4

2 回答 2

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
于 2013-07-20T17:42:06.617 回答
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]]
于 2013-07-20T17:20:08.413 回答