ruby: sum corresponding members of two or more arrays ruby: sum corresponding members of two or more arrays ruby ruby

ruby: sum corresponding members of two or more arrays


Here's the transpose version Anurag suggested:

[[1,2,3], [4,5,6]].transpose.map {|x| x.reduce(:+)}

This will work with any number of component arrays. reduce and inject are synonyms, but reduce seems to me to more clearly communicate the code's intent here...


Now we can use sum in 2.4

nums = [[1, 2, 3], [4, 5, 6]]nums.transpose.map(&:sum) #=> [5, 7, 9]


For clearer syntax (not the fastest), you can make use of Vector:

require 'matrix'Vector[1,2,3] + Vector[4,5,6]=> Vector[5, 7, 9]

For multiple vectors, you can do:

arr = [ Vector[1,2,3], Vector[4,5,6], Vector[7,8,9] ]arr.inject(&:+)=> Vector[12, 15, 18]

If you wish to load your arrays into Vectors and sum:

arrays = [ [1,2,3], [4,5,6], [7,8,9] ]arrays.map { |a| Vector[*a] }.inject(:+)=> Vector[12, 15, 18]