2

想象有一个数字数组定义为:a = [18, 20, 21, 22, 23]。我想修改它,使它看起来像这样:a = [18, (20..23)]. 最优雅的解决方案是什么?

4

2 回答 2

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]
于 2013-06-04T07:21:26.653 回答
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]
于 2013-06-04T07:22:39.860 回答