ruby 任务 : joining numbers to intervals

标签 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

但我认为这里有更干净的解决方案

最佳答案

这是我的,使用 ver 1.9.1

def torange(a)
  r=[];s=a[0]
  a.uniq.sort!.each_cons(2) do |a|
      r<<[s,a[0]] and s=a[1] if a[1]-a[0]!=1
  end
  left=a.index(s)
  r<<[a[left..-1][0],a[left..-1][-1]]
end

torange([1,2,3,4,7,8,10,12]).each do |x|
  puts x[0]==x[1] ? "#{x[0]}" : "#{x[0]}-#{x[1]}"
end

输出

$ ruby test.rb
1-4
7-8
10
12

关于 ruby 任务 : joining numbers to intervals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3987192/

相关文章:

ruby-on-rails - 如何添加 CSV header

ruby - 从数组强制

mysql - 如何在 Datamapper 的 UPDATE 查询中添加 WHERE 子句

ruby-on-rails - 在 Ruby 中,将非常大的局部变量复制到实例变量会重复内存需求

sql - 将一些 SQL 查询转换为事件记录

python - 查找所有具有正方形尺寸的图像 (1 :1 ratio)

ruby - 根据公共(public)属性将 ruby​​ 数组分成多个数组

ruby-on-rails - `method_missing':#<Rails::Engine::Configuration:0x9d6a6d8> 的未定义方法 `assets' (NoMethodError)

ruby-on-rails - Rails 3 身份验证插件建议?

ruby-on-rails - 哈希将每个值相互求和