我有这些范围:
X = [10..17,21..34,40..117,384..399,407..455,989..1013]
我需要的是: 如果第二个范围的第一个数减去第一个范围的最后一个数小于10,则将它们组合在一起,否则包括范围。 我需要的是以下内容:
result = [[10..17,21..34,40..117],[384..399,407..455],[989..1013]]
我所做的就是这个,但这并不是两个以上的组合。
Y = []
X.each_cons(2) do |r1,r2|
if (r2.first - r1.last) < 10
Y << ((r1.last - r1.first) + (r2.last - r2.first)
else
Y << (r1.last - r1.first)
end
end
# Y = [[10..17,21..34,40..117],[384..399,407..455],[989..1013]]
我还想在每个元素中添加所有范围:
Y = [97, 63, 24]
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
prev = X.first.last
# => 17
X.slice_before{|r| (r.first - prev >= 10).tap{prev = r.last}}.to_a
# => [[10..17, 21..34, 40..117], [384..399, 407..455], [989..1013]]