我试图找出如何将整数数组更改为范围数组。 例如,我想采用这个数组:
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}
我不知道如何使用它们来创建范围,我也希望避免创建冗余变量,例如a
和b
。
我不想对任何值进行排序。范围40..23
是故意的。
答案 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