我得到一个散列值,作为整数数组。我想在结果中添加相同索引的所有值。散列值中所有数组的长度相同。 例如,
hash = {
"A" => [1,2,3],
"B" => [1,2,3],
"C" => [1,2,3]
}
然后我想要的结果数组,将所有相同的索引元素加在一起将是[3,6,9]。
在ruby中有没有有效的方法呢?或者循环键和数组元素是最好的解决方案??
感谢。
答案 0 :(得分:1)
以这种方式:
hash.values.transpose.map { |r| r.reduce(:+) }
#=> [3,6,9]
另一个是:
values = hash.values
values.shift.zip(*values).map { |r| r.reduce(:+) }
#=> [3,6,9]
如果您更喜欢使用linear algebra,可以这样做:
require 'matrix'
(Matrix.row_vector([1]*hash.size)*Matrix[*hash.values]).row(0).to_a
#=> [3, 6, 9]