Удалить элементы массива Perl - PullRequest
1 голос
/ 09 марта 2012

Есть ли простой способ удалить n последовательных элементов массива Perl (что делает его короче по длине)?

Ответы [ 3 ]

14 голосов
/ 09 марта 2012

Вы ищете встроенную функцию Perl splice , которая позволяет выбрать начальную точку, количество удаляемых элементов и дополнительный список замены.

my @array = 0 .. 9;

my @slice = splice @array, 3, 3;

say "@slice";   # prints "3 4 5"
say "@array";   # prints "0 1 2 6 7 8 9"
say 0 + @array; # prints 7
3 голосов
/ 09 марта 2012

Вы можете использовать splice для удаления элементов массива.

0 голосов
/ 09 марта 2012

Как указано в других ответах, splice работает.В качестве альтернативного подхода (в конце концов, TIMTOWTDI), если у вас есть верхний и нижний индексы для n последовательных элементов, которые вы хотите удалить, то вы можете сделать это через grep и срез массива.Например:

use strict;
use warnings;

my @a=("a".."z");

#We will remove the letters "e" through "u"
my $lower=4;
my $upper=20;
print "$_\n" foreach(@a[grep{$_<$lower or $_>$upper}0..$#a]);

Вывод:

a
b
c
d
v
w
x
y
z
...