# Grouping elements of an array?

**URL:** <https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349>\
**Category:** Ruby\
**Created:** [January 8, 2007, 6:35am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349 "2007-01-08T06:35:49Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 6:35am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/1 "2007-01-08T06:35:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 6:50am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/2 "2007-01-08T06:50:50Z")

</div>

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 K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 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/](http://www.humblelittlerubybook.com/book/)

My blogs:

> **[Site not found · DreamHost](http://www.mrneighborly.com/)**
>
> The owner of this domain has not yet uploaded their website.

[http://www.rubyinpractice.com/](http://www.rubyinpractice.com/)

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 6:56am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/3 "2007-01-08T06:56:50Z")

</div>

On 08/01/07, Sam K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I can iterate the elements using a counter to divide but it’s so  
> boring.
> 
> Thanks in advance.
> 
> Sam

requre ‘enumerator’

[1,2,3,4,5,6,7,8,9].enum\_slice(3).inject([]){|array,slice| array \<\<  
slice}

Farrel

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 8:00am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/4 "2007-01-08T08:00:53Z")

</div>

FYI. B is what you expect:  
A=[1,2,3,4,5,6,7,8,9];B=[];  
3.times {B\<\<A.slice!(0…2);}

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 8:26am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/5 "2007-01-08T08:26:56Z")

</div>

Farrel L. wrote:

> > 
> 
> requre ‘enumerator’
> 
> [1,2,3,4,5,6,7,8,9].enum\_slice(3).inject([]){|array,slice| array \<\< slice}
> 
> Farrel

requre ‘enumerator’  
[1, 2, 3, 4, 5, 6, 7, 8].enum\_slice(3).to\_aj

Without “require”:  
[1, 2, 3, 4, 5, 6, 7, 8].inject([[]]){|a,e|  
a \<\< [] if a.last.size==3; a.last \<\< e; a}

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 9:12am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/6 "2007-01-08T09:12:58Z")

</div>

Hi William,

William J. 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

---

<div class="post-metadata">

**Author:** ![ssk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@ssk](https://www.ruby-forum.com/u/ssk)\
**Post date:** [January 8, 2007, 7:02am UTC](https://www.ruby-forum.com/t/grouping-elements-of-an-array/81349/7 "2007-01-08T07:02:51Z")

</div>

Farrel L. wrote:

> On 08/01/07, Sam K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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]]
