這裏是我落得這樣做:
class Array
def bucketize(n)
return [] if (buckets = n.to_i) <= 0
j = length/buckets.to_f
result = each_with_index.chunk { |_, i| (i/j).floor }.map { |_, v| v.map(&:first) }
result << [] until result.length == buckets
result
end
end
示例:
a = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.bucketize(1)
=> [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
a.bucketize(2)
=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
a.bucketize(3)
=> [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
a.bucketize(4)
=> [[1, 2, 3], [4, 5], [6, 7, 8], [9, 10]]
...
a.bucketize(9)
=> [[1, 2], [3], [4], [5], [6], [7], [8], [9], [10]]
...
a.bucketize(11)
=> [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], []]
沒有,就沒有這樣的方法 – tokland
沒有一個單一的方法,但有一個單一的線的方法來做到這個。 array.each_slice(3).map --- oops。不,我錯了。我錯過了你正在尋找的東西。 – digidigo
似乎真的沒有辦法。所以關閉你的問題,如果不是在尋找一種方法 –