Morton Goldberg
7/20/2006 8:30:00 AM
Although you could use Enumerator::each_slice as others have
suggested, it might be simpler to augment Array with a partition
function.
class Array
def partition(n, r=[])
raise ArgumentError if n <= 0
if n <= size then
r << first(n)
last(size - n).partition(n, r)
else
r << self unless empty?
return r
end
end
end
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(1) => [[1], [2], [3], [4],
[5], [6], [7], [8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(3) => [[1, 2, 3], [4, 5, 6],
[7, 8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(4) => [[1, 2, 3, 4], [5, 6, 7,
8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(6) => [[1, 2, 3, 4, 5, 6], [7,
8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(8) => [[1, 2, 3, 4, 5, 6, 7, 8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(10) => [[1, 2, 3, 4, 5, 6, 7, 8]]
p [ 1, 2, 3, 4, 5, 6, 7, 8 ].partition(-2) =>
untitled text:6:in `partition': ArgumentError (ArgumentError)
from untitled text:24
Hope this is helps.
Regards, Morton
On Jul 20, 2006, at 2:55 AM, Paolo Bacchilega wrote:
> Hi,
>
> Is there a way to split an array in sub arrays of the same length,
> that
> is :
>
> [ 1, 2, 3, 4, 5, 6, 7, 8 ].unknown_function(3)
>
> that returns:
>
> [ [1, 2, 3], [4, 5, 6], [7, 8] ]
>
>
> thanks in advance.