Как получить все элементы из индекса N до конца из анонимного массива Perl? - PullRequest
9 голосов
/ 10 ноября 2011

В Perl 5, когда у нас есть именованный массив, например @a, получить элементы из индекса $N и далее просто с небольшим количеством нарезки :

my @result = @a[$N..$#a];

Есть ли стандартный способ сделать то же самое с анонимным массивом, без необходимости явно указывать длину? То есть может это:

my @result = (0,1,2,3,4,5)[2..5];

или, точнее, это:

my @result = (0,1,2,3,4,5)[$N..5];

быть преобразованным во что-то, что не требует, чтобы верхний предел диапазона был явным? Возможно, какой-то неясный синтаксис Perl? Может быть, немного нарезать кубиками вместо нарезки?

PS: я уже написал это как функцию - я ищу более автономный подход.

Ответы [ 3 ]

18 голосов
/ 10 ноября 2011

Вы можете splice это:

@result = splice @{[0..$M]}, $N;  # return $N .. $M
1 голос
/ 12 ноября 2011

Вам не нужно давать массиву ref имя, если вы задали его в качестве темы:

    sub returns_array_ref {[1 .. 5]}

    my @slice = map @$_[$n .. $#$_] => returns_array_ref;

Или, если вы работаете со списком:

    sub returns_list {1 .. 5}

    my @slice = sub {@_[$n .. $#_]}->(returns_list);
1 голос
/ 10 ноября 2011

Я думаю, что моб splice - лучший вариант, но в духе опций:

my @result = reverse ((reverse 0..5)[0..$N+1]);

Это возвращает тот же результат, что и в примере выше:

my @result = (0..5)[$N..5];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...