数组散列中所有元素的总和

sum of all elements in hash of arrays

我得到一个散列值作为整数数组。我想在我的结果中添加相同索引的所有值。哈希值中所有数组的长度相同。 例如,

hash = {
 "A" => [1,2,3],
 "B" => [1,2,3],
 "C" => [1,2,3]
}

然后我想要的结果数组,将所有相同的索引元素加在一起将是 [3,6,9]。

在 ruby 中有什么有效的方法可以做到这一点吗??或者遍历键和数组元素是最好的解决方案??

谢谢。

这是一种方法:

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]