2010-11-24 3 views
5

У меня есть массив, содержащий набор элементов. Порядок элементов не имеет значения - я использую массив, поскольку это самая простая структура данных, которую я знаю в Perl.Что такое «правильный» способ удаления элементов массива в 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)?

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

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

+0

возможно дубликат [Что это лучший способ, чтобы удалить значение из массива в Perl?] (Http://stackoverflow.com/questions/174292/ то, что-это-The-лучший способ к удалить-а-значение-от-ан-массив-в-Perl) – 2014-04-10 20:53:10

ответ

7

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

@arr = grep { cond($i++); } @arr; 
7

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

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

@arr = @arr[ @indices ]; 

Вы можете прочитать больше о срезах в perldata.

Смежные вопросы