<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ruby code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 21 Aug 2008 15:45:39 GMT</pubDate>
    <description>DZone Snippets: ruby code</description>
    <item>
      <title>Split array into smaller arrays of equal size</title>
      <link>http://snippets.dzone.com/posts/show/3486</link>
      <description>Split an array of elements into a set of smaller arrays of equal size. Extra elements are preferentially assigned to earlier arrays. If there are no elements in a given returned array it will be [] (empty array)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# use as standalone function&lt;br /&gt;def chunk_array(array, pieces=2)&lt;br /&gt;  len = array.length;&lt;br /&gt;  mid = (len/pieces)&lt;br /&gt;  chunks = []&lt;br /&gt;  start = 0&lt;br /&gt;  1.upto(pieces) do |i|&lt;br /&gt;    last = start+mid&lt;br /&gt;    last = last-1 unless len%pieces &gt;= i&lt;br /&gt;    chunks &lt;&lt; array[start..last] || []&lt;br /&gt;    start = last+1&lt;br /&gt;  end&lt;br /&gt;  chunks&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# use as array.chunk&lt;br /&gt;class Array&lt;br /&gt;  def chunk(pieces=2)&lt;br /&gt;    len = self.length;&lt;br /&gt;    mid = (len/pieces)&lt;br /&gt;    chunks = []&lt;br /&gt;    start = 0&lt;br /&gt;    1.upto(pieces) do |i|&lt;br /&gt;      last = start+mid&lt;br /&gt;      last = last-1 unless len%pieces &gt;= i&lt;br /&gt;      chunks &lt;&lt; self[start..last] || []&lt;br /&gt;      start = last+1&lt;br /&gt;    end&lt;br /&gt;    chunks&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Examples of use:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; chunk_array [1,2,3,4,5,6], 2&lt;br /&gt;=&gt; [[1, 2, 3], [4, 5, 6]]&lt;br /&gt;&lt;br /&gt;&gt;&gt; chunk_array [1,2,3,4,5,6], 3&lt;br /&gt;=&gt; [[1, 2], [3, 4], [5, 6]]&lt;br /&gt;&lt;br /&gt;&gt;&gt; chunk_array [1,2,3,4,5,6], 4&lt;br /&gt;=&gt; [[1, 2], [3, 4], [5], [6]]&lt;br /&gt;&lt;br /&gt;&gt;&gt; chunk_array [1,2,3,4,5,6,7,8,9,10], 4&lt;br /&gt;=&gt; [[1, 2, 3], [4, 5, 6], [7, 8], [9, 10]]&lt;br /&gt;&lt;br /&gt;&gt;&gt; chunk_array [1,2,3], 4&lt;br /&gt;=&gt; [[1], [2], [3], []]&lt;br /&gt;&lt;br /&gt;&gt;&gt; chunk_array [], 2&lt;br /&gt;=&gt; [[], []]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;if you prefer the second form (more ruby-ish, but not always appropriate)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; [1,2,3,4,5,6,7,8,9,10].chunk&lt;br /&gt;=&gt; [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]&lt;br /&gt;&lt;br /&gt;&gt;&gt; [1,2,3,4,5,6,7,8,9,10].chunk 3&lt;br /&gt;=&gt; [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is handy when used with a splat because you can do things like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;left, right = *chunk_array(all,2)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Feb 2007 22:52:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3486</guid>
      <author>mattsa (Matt Sanders)</author>
    </item>
  </channel>
</rss>
