整数数组到范围数组

Array of integers into array of ranges

我想弄清楚如何将整数数组更改为范围数组。 例如我想采用这个数组:

ar = [0, 49, 14, 30, 40, 23, 59, 101]

进入

ar = [0..49, 14..30, 40..23, 59..101]

给定的数组总是偶数。我想取每两个值作为范围的边界。

我试过将它分成两个数组。一个索引为奇数,其次为偶数。

a = ar.select.with_index{|_,i| (i+1) % 2 == 1}
b = ar.select.with_index{|_,i| (i+1) % 2 == 0}

我不知道如何使用它们来创建范围,我也想避免创建像 ab 这样的冗余变量。 我不想对任何值进行排序。范围 40..23 是故意的。

 ar.each_slice(2).map { | a, b | a..b }
new_ar = []

ar.each_slice(2) do |r|
    new_ar << Range.new(r[0], r[1])
end

我会按照@undur_gongor的建议去做,但这是另一种方式:

e = ar.to_enum
b = []
loop do
  b << (e.next..e.next)
end
b 
  #=> [0..49, 14..30, 40..23, 59..101]