11175
(-- --)
January 7, 2008, 1:18pm
1
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
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
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
11175
(-- --)
January 7, 2008, 5:32pm
4
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
Oops, I obviously went on crack when I typed it into my mail client
Fred
11175
(-- --)
October 3, 2009, 8:18pm
6
[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