I often want to take out a subpart from an Enumerable. The subpart is sometimes at the beginning and sometimes the end of the original Enumerable instance, and the length used to specify the subpart is sometimes that of the subpart and sometimes its complement. That gives four possibilities, but I only know how to do three of them. Is there a way to do the fourth one?
1) Getting the first n elements:
[1, 2, 3, 4, 5].first(3) # => [1, 2, 3] or
[1, 2, 3, 4, 5].take(3) # => [1, 2, 3]
2) Dropping the first n elements:
[1, 2, 3, 4, 5].drop(3) #=> [4, 5]
3) Getting the last n elements:
[1, 2, 3, 4, 5].last(3) #=> [3, 4, 5]
4) Dropping the last n elements:
[1, 2, 3, 4, 5].some_method(3) #=> [1, 2]
There is no built-in way that does exactly this, but it’s easy to use
slicewith a negative index:and you could roll your own if you do that often:
Note:
lastis not a method ofEnumerable; the only wayrdropcould be one would be to build the array first (likeEnumerable#sortdoes)…