2012-01-06 47 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]