我有一个哈希数组,其中每个哈希都有一个size
键:
blocks = [{size: 1},{size: 3},{size: 4}]
现在我想通过聚合size
值并定义4
的上限来将此数组拆分为子数组。在每个子数组中,size
键的总和值应小于4
。
我有这个解决方案,但它并不漂亮或优雅:
arr = []
tmp = []
sum = 0
blocks.each do |block|
sum += block[:size]
tmp.push(block)
if sum >= 4
arr.push(tmp)
sum = 0
tmp = []
end
end
也许有人知道更像红宝石的优雅解决方案。
答案 0 :(得分:1)
有一种方法可以使用slice_when:
sum = 0
blocks.slice_when do |elt_before, _|
sum += elt_before[:size]
sum >= 4 ? (sum = 0; true) : false
end.to_a
编辑:根据@CarySwoveland建议
如果使用slice_after:
,它会变得更简单sum = 0
blocks.slice_after do |elt|
sum += elt[:size]
sum >= 4 ? (sum = 0; true) : false
end.to_a
同时注明slice_when
& slice_after
首次出现在Ruby v.2.2