想象一下,将一组数字定义为:a = [18, 20, 21, 22, 23]
。我想修改它,使它看起来像这样:a = [18, (20..23)]
。那个最优雅的解决方案是什么?
答案 0 :(得分:1)
以下是从doc: Enumerable#slice_before最低限度修改的代码。
i = a[0]
a.slice_before do |e|
i, j = e, i
j + 1 != e
end
.flat_map{|es| es.length < 3 ? es : es.first..es.last}
# => [18, 20..23]
答案 1 :(得分:1)
a = [18, 20, 21, 22, 23,13,14].sort!
prev = a[0]
p a.slice_before { |e|
prev, prev2 = e, prev
prev2 + 1 != e
}.flat_map{|i| next Range.new(i.first,i.last) if i.size !=1 ; i}
#=> [13..14, 18, 20..23]