如何将每个 block 中的范围元素添加在一起。例如:
a = [[1..10, 13..20, 21..24], [34..39, 42..45], [50..55]]
结果:
a = [[9+7+3],[5+3],[5]]
a = [20, 8, 5]
最佳答案
您可以通过相应的first
和last
方法访问范围的第一个和最后一个元素。 inject(:+)
对属于同一组的所有范围的部分距离求和。
a.map { |ranges| ranges.map { |range| range.last - range.first }.inject(:+) }
=> [19, 8, 5]
或者,甚至更短,正如 tokland 使用 Ruby 2.0 所建议的那样:
a.map { |ranges| ranges.map(&:size).reduce(0, :+) }
关于ruby 在每个 block 中添加范围元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607512/