整数数组到范围数组

时间:2015-03-13 12:13:56

标签: ruby arrays range

我试图找出如何将整数数组更改为范围数组。 例如,我想采用这个数组:

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是故意的。

3 个答案:

答案 0 :(得分:11)

 ar.each_slice(2).map { | a, b | a..b }

答案 1 :(得分:2)

我会像@ undur_gongor建议的那样做,但这是另一种方式:

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

答案 2 :(得分:1)

new_ar = []

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