Ruby 填写并订购范围列表?

Ruby 填写并订购范围列表?,ruby,Ruby,我有以下范围: (800..1200) (800..1600) (800..1700) (800..1900) (900..1500) (1000..2000) (2200..2300) 想要得到这样的数组: [(800..900), (900..1000), (1000..1200), (1200..1500), (1500..1600), (1600..1700), (1700..1900), (1900..2000), (2000..2200), (2200..2300)] 所需的数组

我有以下范围:

(800..1200)
(800..1600)
(800..1700)
(800..1900)
(900..1500)
(1000..2000)
(2200..2300)
想要得到这样的数组:

[(800..900), (900..1000), (1000..1200), (1200..1500), (1500..1600), (1600..1700), (1700..1900), (1900..2000), (2000..2200), (2200..2300)]
所需的数组(范围)是一个有序的范围列表,其中范围[n+1]。min==范围[n]。max。我们的射程之间不应该有任何差距

我已经成功地编写了这样做的代码,但是循环中的if/else列表很长,可读性不强。我想知道是否有人知道如何更简洁地做到这一点?

这应该可以做到

a = [(800..1200),  (800..1600), (800..1700), (800..1900),
     (900..1500), (1000..2000), (2200..2300)]
a.each_with_object([]) { |r,a| a << r.first << r.last }
 .uniq
 .sort
 .each_cons(2)
 .to_a
 .map { |a,b| a..b }
   #=> [800..900, 900..1000, 1000..1200, 1200..1500, 1500..1600,
   #    1600..1700, 1700..1900, 1900..2000, 2000..2200, 2200..2300]
a=[(800..1200),(800..1600),(800..1700),(800..1900),
(900..1500), (1000..2000), (2200..2300)]

a、 每个带有对象([])的对象{| r,a | a见FAQ中关于的第3部分。你需要提供你的代码的示例,并说明为什么它不起作用。照此,如果没有它,你的问题就离题了。你用什么标准来决定你的第一个范围是
800..900
,第二个范围是
900..1000
,等等。没有这些,我们帮不了你多少忙。谢谢,但我是我很讨厌看到绿色的复选标记出现得如此之快,因为它可能会阻碍其他可能更好的答案。说实话,写下答案帮助我在你给出答案之前找到了答案,我使用了一个中间数组,而不是像你那样使用一行,但得到了相同的想法(Ruberduck编程;)无论如何,我想感谢你的回答,我会记住你对未来的明智建议。