Задача Ruby: объединение чисел с интервалами

У меня есть массив уникальных чисел. Как это: [1,2,3,4,7,8,10,12]. Может быть несортированным. Мне нужно получить интервалы для этого массива:

intervals_for [1,2,3,4,7,8,10,12]
#=> "1-4, 7-8, 10,12"

У меня есть собственное решение:

def intervals_for(array)
  array.sort!
  new_array = []
  array.each do |a|
    if new_array.last and a == new_array.last.last+1
      new_array.last << a
    else
      new_array << [a]    
    end
  end
  new_array.map{|a| a.size > 1 ? "#{a.first}-#{a.last}" : a.first}.join(", ")
end

Но я думаю, что где-то здесь есть более чистое решение

9
задан fl00r 21 October 2010 в 12:02
поделиться