包括nil的数组的相应元素的总和

时间:2014-11-27 16:53:39

标签: ruby arrays sum

如何在Ruby中总结

[1, 2, nil, 4] 

[nil, 2, nil, 4] 

并且

[1, 4, nil, 8]

3 个答案:

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