a1=[1,2,3] a2=[4,5,6] a3=[7,8,9] 如何得到 result=[12,15,18] 尽量用 map 之类的写法,不用循环
改进版,这样每个数组长度不相同也可以
a1 = [1, 2, 3]
a2 = [4, 5, 6]
a3 = [7, 8]
a1.zip(a2, a3).reduce([]) { |result, item| result << item.compact.sum }
p (0..2).map { |i| a1[i]+a2[i]+a3[i]}
p (0..2).map { |i| [a1,a2,a3].map { |j| j[i]}.inject(:+) }
来晚了。没参考别人答案之前写的答案:a1.zip(a2,a3).reduce([]){ |result, a| result << a.reduce(0){ |sum, i | sum + i } }
单行方案:
[a1, a2, a3].transpose.map{ |x| x.reduce(&:+) }
还是 Rails 的 sum 方法更优美、自然:
module Enumerable
def sum(identity = 0, &block)
if block_given?
map(&block).sum(identity)
else
inject { |sum, element| sum + element } || identity
end
end
end
[a1,a2,a3].transpose.map(&:sum)
其实 Python 的也不错:
map(sum, zip(a1, a2, a3))
方法都让大家想完了..
来个 loop 版本的吧。
x = a1.zip(a2, a3).to_enum
y = []
loop { y << x.next.reduce(:+) }