如何将包含nil的数组按4元素分组求和(nil视为0)
数组分组求和(nil视为0)
给定数组:
[1, 2, 3, 4, 5, nil, 7, 8, 9, nil, nil, 12]
要实现按4个元素为一组求和,nil视为0,最终得到[10, 20, 21],可以用Ruby的数组方法快速实现:
实现代码
arr = [1, 2, 3, 4, 5, nil, 7, 8, 9, nil, nil, 12] result = arr.each_slice(4).map do |group| group.sum { |num| num || 0 } end p result # 输出: [10, 20, 21]
步骤拆解
each_slice(4):将原数组按每4个元素分割为子数组,得到[[1,2,3,4], [5,nil,7,8], [9,nil,nil,12]]sum { |num| num || 0 }:对每个子数组求和,同时把nil替换为0计算(num || 0确保nil被当作0处理)
兼容旧Ruby版本的写法
如果使用Ruby 2.4以下版本(sum方法2.4才引入),可以用inject替代:
result = arr.each_slice(4).map { |group| group.inject(0) { |total, num| total + (num || 0) } }
内容的提问来源于stack exchange,提问作者Spyros
相关产品推荐
相关产品推荐

