2015-10-18 64 views
1

紅寶石陣列子範圍是否有可能的子範圍應用於陣列中紅寶石這樣的:如果[0...2]被存儲在變量當該範圍是可變

> array = [4, 3, 2, 1] 
> array[0...2] 
=> [4, 3] 

?我似乎無法得到我想要的語法。如果有的話,什麼取代以下的<?>

> array = [4, 3, 2, 1] 
> range = [0...2] 
> array<?> 
=> [4, 3] 

回答

3

是的,當然!做到這一點的方法:如果你想避免.first呼叫

array = [4, 3, 2, 1] 
exclusive_range = [0...2] # Will get 0th and 1st element of the array 
inclusive_range = [0..2] # Will get 0th, 1st and 2nd element of the array 
array[exclusive_range.first] 
# => [4, 3] 
array[inclusive_range.first] 
# => [4, 3, 2] 

,你可以把你的範圍變量(而不是在一個數組):

range = 0...2 
array[range] 
# => [4, 3] 
+1

非常有趣!我們爲什麼一定要先打電話呢? –

+1

因爲你的範圍('0 ... 2')是'exclusive_range'數組的第一個元素。 –

+1

看看我更新的答案,就是說,如果你將範圍定義爲一個不在數組中的變量,那麼你不需要調用:'range.first'。如果你有任何其他問題,請告訴我。 –

1

注意(0..2).size #=> 3。如果你想返回[4,3]你想:

range = 0..1 

你可以使用這樣的:

array[range]   #=> [4, 3] 

或像這樣:

array.values_at *range #=> [4, 3]