Каков «правильный» способ удаления элементов массива в Perl? - PullRequest
5 голосов
/ 24 ноября 2010

У меня есть массив, содержащий набор элементов. Порядок элементов не имеет значения - я использую массив, так как это самая простая структура данных, которую я знаю в Perl.

my @arr = ...
while (some condition) {
    # iterate over @arr and remove all elements which meet some criteria
    # (which depends on $i)
}

Я знаю о splice(), но я думаю, что использовать его во время итерации нехорошо. delete для элементов массива кажется устаревшим. Возможно использовать grep на @arr в себе (@arr = grep {...} @arr)?

Какая лучшая практика здесь?

Возможно, использовать хеш (хотя он мне и не нужен)?

Ответы [ 2 ]

7 голосов
/ 24 ноября 2010

Ваша идея использовать grep хороша

@arr = grep { cond($i++); } @arr;
7 голосов
/ 24 ноября 2010

Согласно документации, вызов delete для значений массива устарел и, вероятно, будет удален в будущей версии Perl.

Кроме того, вы можете создать список необходимых индексов и назначить срез исходному массиву:

@arr = @arr[ @indices ];

Подробнее о срезах можно прочитать в perldata .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...