我有一个包含10个项目的数组,我想将它分成3个部分,如下所示:
[1, 2, 3, 4]
[5, 6, 7]
[8, 9, 10]
使用each_slice
我可以近距离接触:
a = *(1..10)
a.each_slice(4) # use 4 so I can fit everything into 3 sections
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10]
但我希望第一种格式更均匀地分布。我可以写自己的方法。 但是在ruby 1.9 +中有没有内置的方法呢?
更新
由于没有内置方式,我想将问题更改为 - 您将如何实施?
答案 0 :(得分:3)
这是我的实施
def chunk(a, pieces)
size = a.size / pieces
extra = a.size % pieces
chunks = []
start = 0
1.upto(pieces) do |i|
last = (i <= extra) ? size.next : size
chunks << a.slice(start, last)
start = chunks.flatten.size
end
chunks
end
这样称呼
a = *(1..10)
puts chunk(a, 3)
将输出
[1, 2, 3, 4]
[5, 6, 7]
[8, 9, 10]
如果件尺寸太大,则用空阵列填充
a = *(1..10)
puts chunk(a, 14)
将输出
[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [], [], [], []]