before i start writing my own sophisticated small algorithm i thought i ask you guys how to do this in a rails way .. given array: a = [1, 2, 3, 4, 5, 6, 7] out of this array i need an array b holding three elements where each of them holds the same size of elements ... if not possible then the last one should hold less .. so for the above it would be b = [[1, 2, 3], [4, 5, 6], [7]] another example: a = [1, 2] => b = [[1], [2], []] thanks for the simplest way

on 2008-01-07 14:18

on 2008-01-07 14:58

On 7 Jan 2008, at 13:18, Michal Gabrukiewicz wrote: > them holds the same size of elements ... if not possible then the last > one should hold less .. so for the above it would be > > b = [[1, 2, 3], [4, 5, 6], [7]] > > another example: > a = [1, 2] => b = [[1], [2], []] > Well not massively nice but def split(array) length = (array.length / 3.0).ceil [array[0, length], array[length, 2*length], array[2*length, 3*length]] end Fred

on 2008-01-07 15:17

On Jan 7, 2008, at 7:18 AM, Michal Gabrukiewicz wrote: > them holds the same size of elements ... if not possible then the last > one should hold less .. so for the above it would be > > b = [[1, 2, 3], [4, 5, 6], [7]] > > another example: > a = [1, 2] => b = [[1], [2], []] > > thanks for the simplest way > in_groups_of a = [1,2,3,4,5,6,7] a.in_groups_of(3) [[1,2,3], [4,5,6], [7,nil,nil]] or a.in_groups_of(3, false) [[1,2,3], [4,5,6], [7]] Peace, Phillip

on 2008-01-07 16:42

Phillip Koebbe wrote: > On Jan 7, 2008, at 7:18 AM, Michal Gabrukiewicz wrote: > >> them holds the same size of elements ... if not possible then the last >> one should hold less .. so for the above it would be >> >> b = [[1, 2, 3], [4, 5, 6], [7]] >> >> another example: >> a = [1, 2] => b = [[1], [2], []] >> >> thanks for the simplest way >> > > in_groups_of > thanks philip but this does it exactly the other way round .. fred's version is fine but it was a bit buggy .. this works fine #splits an array into 3 equal parts def split_array(array) length = (array.length / 3.0).ceil [array[0, length], array[length, length], array[2 * length, length]] end

on 2008-01-07 18:32

Michal Gabrukiewicz wrote: > thanks philip but this does it exactly the other way round .. fred's > version is fine but it was a bit buggy .. this works fine > > #splits an array into 3 equal parts > def split_array(array) > length = (array.length / 3.0).ceil > [array[0, length], array[length, length], array[2 * length, length]] > end You know, if I had been paying attention, I would have done two things differently: 1) ran your second example 2) noticed that Fred did *not* suggest in_groups_of Either one of those would have been sufficient to tell me that my idea was not correct. <crawling back into his cave> Peace, Phillip

on 2008-01-07 18:47

On 7 Jan 2008, at 15:42, Michal Gabrukiewicz wrote: >>> another example: > > #splits an array into 3 equal parts > def split_array(array) > length = (array.length / 3.0).ceil > [array[0, length], array[length, length], array[2 * length, > length]] > end Oops, I obviously went on crack when I typed it into my mail client :-) Fred

on 2009-10-03 22:18

```
>> [1, 2, 3, 4, 5, 6, 7].in_groups(3)
=> [[1, 2, 3], [4, 5, nil], [6, 7, nil]]
Note that the in_groups takes 1 from each of the last 2 columns instead
of 2 from the last.
```

on 2009-10-03 22:26

2009/10/3 Morgan Christiansson <rails-mailing-list@andreas-s.net>: > >>> [1, 2, 3, 4, 5, 6, 7].in_groups(3) > => [[1, 2, 3], [4, 5, nil], [6, 7, nil]] > > Note that the in_groups takes 1 from each of the last 2 columns instead > of 2 from the last. That is as documented, you want in_groups_of Colin