Sam_Kong
(Sam Kong)
8 January 2007 05:35
1
Hello,
What's the best way to do the following?
[1,2,3,4,5,6,7,8,9] => [[1,2,3],[4,5,6],[7,8,9]]
I want to transform the array into an array of arrays with fixed number
of elements.
I think there should be a method but I can't find it.
I can iterate the elements using a counter to divide but it's so
boring.
Thanks in advance.
Sam
class Array
def group_in(how_many)
ret_array =
new_array =
self.each {|elem| how_many.times { new_array << self.shift };
ret_array << new_array; new_array = ; }
ret_array
end
end
x = [1,2,3,4,5,6,7,8,9]
x = x.group_in(3)
require 'pp'
pp x
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
That should do it. Not sure if it's the best way, but it will work.
--Jeremy
···
On 1/8/07, Sam Kong <sam.s.kong@gmail.com> wrote:
Hello,
What's the best way to do the following?
[1,2,3,4,5,6,7,8,9] => [[1,2,3],[4,5,6],[7,8,9]]
I want to transform the array into an array of arrays with fixed number
of elements.
I think there should be a method but I can't find it.
I can iterate the elements using a counter to divide but it's so
boring.
Thanks in advance.
Sam
--
My free Ruby e-book:
http://www.humblelittlerubybook.com/book/
My blogs:
http://www.rubyinpractice.com/
requre 'enumerator'
[1,2,3,4,5,6,7,8,9].enum_slice(3).inject( ){|array,slice| array << slice}
Farrel
···
On 08/01/07, Sam Kong <sam.s.kong@gmail.com> wrote:
Hello,
What's the best way to do the following?
[1,2,3,4,5,6,7,8,9] => [[1,2,3],[4,5,6],[7,8,9]]
I want to transform the array into an array of arrays with fixed number
of elements.
I think there should be a method but I can't find it.
I can iterate the elements using a counter to divide but it's so
boring.
Thanks in advance.
Sam
FYI. B is what you expect:
A=[1,2,3,4,5,6,7,8,9];B= ;
3.times {B<<A.slice!(0..2);}
Sam Kong wrote:
···
Hello,
What's the best way to do the following?
[1,2,3,4,5,6,7,8,9] => [[1,2,3],[4,5,6],[7,8,9]]
I want to transform the array into an array of arrays with fixed number
of elements.
I think there should be a method but I can't find it.
I can iterate the elements using a counter to divide but it's so
boring.
Thanks in advance.
Sam
Farrel Lifson wrote:
What's the best way to do the following?
[1,2,3,4,5,6,7,8,9] => [[1,2,3],[4,5,6],[7,8,9]]
...
[1,2,3,4,5,6,7,8,9].enum_slice(3).inject( ){|array,slice| array << slice}
Alternately,
[1,2,3,4,5,6,7,8,9].enum_for(:each_slice,3).to_a
=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
···
On 08/01/07, Sam Kong <sam.s.kong@gmail.com> wrote:
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
Sam_Kong
(Sam Kong)
8 January 2007 08:12
7
Hi William,
William James wrote:
Without "require":
[ 1, 2, 3, 4, 5, 6, 7, 8 ].inject([ ]){|a,e|
a << if a.last.size==3; a.last << e; a}
This looks really clever.
I like it.
Sam