整数数组到范围数组
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}
我不知道如何使用它们来创建范围,我也想避免创建像 a
和 b
这样的冗余变量。
我不想对任何值进行排序。范围 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]
我想弄清楚如何将整数数组更改为范围数组。 例如我想采用这个数组:
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
是故意的。
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]