我经常想从Enumerable中取出一个子部分。子部分有时位于原始Enumerable实例的开头,有时是结尾,用于指定子部分的长度有时是子部分的长度,有时是其补充。这提供了四种可能性,但我只知道如何做其中三种。有办法做第四个吗?
1)获取第一个n
元素:
[1, 2, 3, 4, 5].first(3) # => [1, 2, 3] or
[1, 2, 3, 4, 5].take(3) # => [1, 2, 3]
2)删除第一个n
元素:
[1, 2, 3, 4, 5].drop(3) #=> [4, 5]
3)获取最后n
个元素:
[1, 2, 3, 4, 5].last(3) #=> [3, 4, 5]
4)删除最后n
个元素:
[1, 2, 3, 4, 5].some_method(3) #=> [1, 2]
答案 0 :(得分:2)
没有内置方法可以做到这一点,但是使用带有负索引的slice
很容易:
[1, 2, 3, 4, 5][0...-3] # => [1, 2]
如果你经常这样做,你可以自己动手:
class Array
def rdrop(n)
self[0...-n]
end
end
[1, 2, 3, 4, 5].rdrop(3) # => [1, 2]
注意:last
不是Enumerable
的方法;唯一的方法rdrop
可能是首先构建数组(如Enumerable#sort
那样)......