Как я могу удалить элементы из массива Perl? - PullRequest
1 голос
/ 05 ноября 2010

У меня довольно большой массив, и я хочу удалить 2-й, 8-й, 14-й и т. Д. Элемент из массива.В настоящее время мой массив выглядит так:

Element1 x A B C
Element 2 y A B C
Element 3 z A B C

В общем, я хочу удалить x, y и z (как пример, мой массив немного сложнее).И подтянуть остальное.Как, в, я не хочу иметь пустое место на своих позициях.Я хочу получить:

Element 1 A B C
Element 2 A B C
Element 3 A B C

Я попытался попробовать это с моим массивом "todelete":

print "#Before Deleting"; print
$todelete[0]; print "\n"; print
$todelete[2]; print "\n"; print
$todelete[3];

for ($count=2; $count<@todelete;
$count=$count+6) {  delete
$todelete[$count]; }

print "#After Deleting"; print
$todelete[0]; print "\n"; print
$todelete[2]; print "\n"; print
$todelete[3];$todelete[3];

Но, в настоящее время, я думаю, что он просто унифицирует мойзначение, потому что, когда я печатаю результат, он говорит мне:

Use of uninitialized value in print 

Предложения?

Ответы [ 3 ]

5 голосов
/ 05 ноября 2010

Функция, которую вы хотите: splice.

2 голосов
/ 05 ноября 2010

Вы также можете использовать grep в качестве фильтра:

my $cnt = 0; @todelete = grep { ++$cnt % 6 != 2 } @todelete;

2 голосов
/ 05 ноября 2010

delete $array[$index] - это то же самое, что и $array[$index] = undef; он оставляет пустое место в вашем массиве. Для вашей конкретной проблемы, как что-то вроде

@array = @array[ grep { $_ % 6 != 2 } 0 .. $#array ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...