2015-03-13 102 views
3

我想弄清楚如何可以將整數數組更改爲範圍數組。 例如,我想利用這個數組:數組整數到範圍數組

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

回答

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

完美的答案(Y) – Salil 2015-03-13 12:34:11

+0

謝謝你,這是真的簡潔。 – Gregy 2015-03-13 12:43:17

1
new_ar = [] 

ar.each_slice(2) do |r| 
    new_ar << Range.new(r[0], r[1]) 
end 
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]