2012-01-06 30 views
38

@numbers = [ 1, 2, 3, 4, 5, 6, 7, 8 ]的Ruby/Rails - 獲取數組中的

@numbers.last的最後兩個值都會給我8

我要抓住最後的兩個記錄。到目前爲止,我已經試過了,但它拋出一個NoMethodError

@numbers.last - 1

回答

90

last需要一個參數:

@numbers = [ 1, 2, 3, 4, 5, 6, 7, 8 ] 
@numbers.last(2) # => [7,8] 

如果你要刪除的最後兩個項目:

@numbers.pop(2) #=> [7, 8] 
p @numbers #=> [1, 2, 3, 4, 5, 6] 
+0

+1,這是我總是完全忘記,因爲某些原因,雖然它讀取比索引版友好多了... – 2012-01-06 08:40:42

+2

男人,這是乾淨的。謝謝,Ruby。 – 2015-09-02 16:30:48

+2

我非常喜歡Ruby。 – danielricecodes 2017-05-24 17:03:17

13

陣列使用[]{}定義。您可以使用負的索引和範圍做你想做什麼:

>> @numbers = [ 1, 2, 3, 4, 5, 6, 7, 8 ] #=> [1, 2, 3, 4, 5, 6, 7, 8] 
>> @numbers.last #=> 8 
>> @numbers[-2..-1] #=> [7, 8] 
+2

它應該不是如果數組包含少於給定數量的項目,那麼:@numbers [-9 ..- 1]#=> nil',而不是返回現有的8個元素。在這方面「最後一刻」的表現要好得多。 '@ numbers.last(9)'會返回8元素數組。 – nightingale 2016-06-05 06:31:27

1

嘗試這

@numbers = [ 1, 2, 3, 4, 5, 6, 7, 8 ] 
length = @numbers.length 
@numbers[length - 2..length - 1] => [7, 8]