Вынимаем часть из Enumerable - PullRequest
1 голос
/ 16 июня 2010

Я часто хочу вынуть часть из 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]

1 Ответ

2 голосов
/ 16 июня 2010

Не существует встроенного способа, который делает именно это, но его легко использовать 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) ...

...