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

时间:2015-04-11 07:28:55

标签: ruby arrays hash

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

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

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

在ruby中有没有有效的方法呢?或者循环键和数组元素是最好的解决方案??

感谢。

1 个答案:

答案 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]