数组散列中所有元素的总和
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]
我得到一个散列值作为整数数组。我想在我的结果中添加相同索引的所有值。哈希值中所有数组的长度相同。 例如,
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]