如何在Ruby中总结
[1, 2, nil, 4]
与
[nil, 2, nil, 4]
并且
[1, 4, nil, 8]
答案 0 :(得分:5)
例如如下:
a = [1, 2, nil, 4]
b = [nil, 2, nil, 4]
a.map.with_index {|v,i| (v || b[i]) && v.to_i + b[i].to_i }
更多的estetic方式是:
a.zip(b).map {|v| v.compact.reduce(:+) }
解释:这里#zip
只是用其他值传递的数值重建数组,所以第1行将包含每个数组的第1个元素,2个第2个元素等。然后{1}}和#compact
应用第1行,第2行等每一行。#reduce
只删除#compact
值,因此它们不包含在结果中。 nil
然后通过#reduce
运算符在sum(默认值为:+
)和value之间构造每行的总和,因此在输出中得到值的总和{ {1}}以防空行。
如果我们得到更一般的方法,让我们对矩阵的行进行求和。
nil
答案 1 :(得分:1)
a.zip(b).map {|x, y| x.nil? ? (y.nil? ? nil : y) : (y.nil? ? x : x + y)}
# => [1, 4, nil, 8]
答案 2 :(得分:1)
这是一种利用nil.to_i => O
:
a.zip(b).map { |e,f| [e,f]==[nil,nil] ? nil : e.to_i + f.to_i }