我有一组数字进行排序。我需要一个返回此数组中数字范围的方法。
input: [1,2,3,7,9,10,11,13]
output: [(1..3),(7..7),(9..11),(13..13)]
答案 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)
。