想象有一个数字数组定义为:a = [18, 20, 21, 22, 23]
。我想修改它,使它看起来像这样:a = [18, (20..23)]
. 最优雅的解决方案是什么?
问问题
109 次
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 回答