Как я могу проверить, содержит ли массив Perl определенное значение? - PullRequest
218 голосов
/ 18 мая 2010

Я пытаюсь выяснить способ проверки существования значения в массиве без итерации по массиву.

Я читаю файл для параметра. У меня длинный список параметров, с которыми я не хочу иметь дело. Я поместил эти нежелательные параметры в массив @badparams.

Я хочу прочитать новый параметр и, если он не существует в @badparams, обработать его. Если оно существует в @badparams, перейдите к следующему прочтению.

Ответы [ 11 ]

0 голосов
/ 19 мая 2010

Есть два способа сделать это. Вы можете использовать бросок значений в хеш для таблицы поиска, как предложено в других публикациях. (Я добавлю еще одну идиому.)

my %bad_param_lookup;
@bad_param_lookup{ @bad_params } = ( 1 ) x @bad_params;

Но если это данные, состоящие в основном из символов слова и не слишком много мета, вы можете поместить их в чередование регулярных выражений:

use English qw<$LIST_SEPARATOR>;

my $regex_str = do { 
    local $LIST_SEPARATOR = '|';
    "(?:@bad_params)";
 };

 # $front_delim and $back_delim being any characters that come before and after. 
 my $regex = qr/$front_delim$regex_str$back_delim/;

Это решение должно быть настроено для типов "плохих значений", которые вы ищете. И снова, это может быть совершенно неуместно для определенных типов строк, поэтому caveat emptor .

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