gabru
January 7, 2008, 2: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
gabru
January 7, 2008, 2:58pm
2
On 7 Jan 2008, at 13:18, Michal G. 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, 2length], array[2 length,
3*length]]
end
Fred
gabru
January 7, 2008, 3:17pm
3
On Jan 7, 2008, at 7:18 AM, Michal G. 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
gabru
January 7, 2008, 4:42pm
4
Phillip K. wrote:
On Jan 7, 2008, at 7:18 AM, Michal G. 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
gabru
January 7, 2008, 6:47pm
5
On 7 Jan 2008, at 15:42, Michal G. 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
gabru
October 3, 2009, 10: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.
gabru
January 7, 2008, 6:32pm
7
Michal G. 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:
ran your second example
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.
Peace,
Phillip
gabru
October 3, 2009, 10:26pm
8
2009/10/3 Morgan C. [email protected] :
[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