如何在数字数组中找到所有范围

时间:2019-07-17 10:16:26

标签: arrays ruby range

我有一组数字进行排序。我需要一个返回此数组中数字范围的方法。

input: [1,2,3,7,9,10,11,13]
output: [(1..3),(7..7),(9..11),(13..13)]

2 个答案:

答案 0 :(得分:8)

您没有编写任何代码,所以我也不会。

Enumerable#chunk_while的文档中有一个示例与您的示例非常相似。

答案 1 :(得分:0)

这是一种无需构造数组数组然后将内部数组转换为范围的方法。

arr = [1,2,3,7,9,10,11,13]

arr.each_with_object([]) do |n,a|
  if a.any? and a.last.last == n-1
    a[-1] = (a.last.first..n)
  else
    a << (n..n)
  end
end
  #=> [1..3, 7..7, 9..11, 13..13]

请注意,在范围周围需要括号,以免将a << n..n解析为(a << n)..n,从而导致ArgumentError (bad value for range)