<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Bsiggelkow's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 12:47:39 GMT</pubDate>
    <description>DZone Snippets: Bsiggelkow's Code Snippets</description>
    <item>
      <title>Convert Ruby Array to Ranges</title>
      <link>http://snippets.dzone.com/posts/show/4677</link>
      <description># Array#to_ranges&lt;br /&gt;# Converts an array of values (which must respond to #succ) to an array of ranges. For example,&lt;br /&gt;# [3,4,5,1,6,9,8].to_ranges =&gt; [1,3..6,8..9] &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Array&lt;br /&gt;  def to_ranges&lt;br /&gt;    array = self.compact.uniq.sort&lt;br /&gt;    ranges = []&lt;br /&gt;    if !array.empty?&lt;br /&gt;      # Initialize the left and right endpoints of the range&lt;br /&gt;      left, right = self.first, nil&lt;br /&gt;      array.each do |obj|&lt;br /&gt;        # If the right endpoint is set and obj is not equal to right's successor &lt;br /&gt;        # then we need to create a range.&lt;br /&gt;        if right &amp;&amp; obj != right.succ&lt;br /&gt;          ranges &lt;&lt; Range.new(left,right)&lt;br /&gt;          left = obj&lt;br /&gt;        end&lt;br /&gt;        right = obj&lt;br /&gt;      end&lt;br /&gt;      ranges &lt;&lt; Range.new(left,right)&lt;br /&gt;    end&lt;br /&gt;    ranges&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 19 Oct 2007 13:03:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4677</guid>
      <author>bsiggelkow (Bill Siggelkow)</author>
    </item>
  </channel>
</rss>
