如何在每個塊中添加範圍元素。例如: -紅寶石在每個塊中添加範圍元素
a = [[1..10, 13..20, 21..24], [34..39, 42..45], [50..55]]
結果:
a = [[9+7+3],[5+3],[5]]
a = [20, 8, 5]
如何在每個塊中添加範圍元素。例如: -紅寶石在每個塊中添加範圍元素
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]
或者,甚至更短,如通過使用紅寶石2.0 tokland建議:
a.map { |ranges| ranges.map(&:size).reduce(0, :+) }
Range
類有一個叫做#size
方法。因此,我們可以做的是:
a.map { |ranges| ranges.inject(0) { |sum,rng| sum + rng.size - 1 } }
爲什麼'1..10'等於10,但'13..20'等於7?後者應該是8個IMO。 。 。 ?但是,除了1..10之外,你對這一切始終如一? –
對不起,我改變了它。它應該是10-1,20-13等。 – Mark
所以你想總和1小於每個範圍的條目數? –