PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 135


Решение

Воспользуйтесь функцией grep. Функция применяет критерий ко всем элементам списка и возвращает лишь те, для которых он выполняется:

©РЕЗУЛЬТАТ = grep { КРИТЕРИЙ ($_) } ©СПИСОК,

Комментарий

То же самое можно было сделать в цикле foreach:

©РЕЗУЛЬТАТ =  (), foreach (©СПИСОК)  {


4.14. Числовая сортировка массива    137

ризп(@РЕЗУЛЬТАТ,   $_)  If КРИТЕРИЙ  ($_), }

Функция Perl g rep позволяет записать всю эту возню с циклами более компакт­но. В действительности функция дгер сильно отличается от одноименной коман­ды UNIX — она не имеет параметров для нумерации строк или инвертирования критерия и не ограничивается проверками регулярных выражений. Например, чтобы отфильтровать из массива очень большие числа или определить, с какими ключами хэша ассоциированы очень большие значения, применяется следующая запись:

©bigs = grep { $_ > 1_000_000 } ©nums,

©pigs = grep { $users{$_} > 1e7 } keys %users,

В следующем примере в @matching заносятся строки, полученные от коман­ды who и начинающиеся с  gnat    :

©matching = grep { /"gnat / }    who , Или другой пример:

©engineers = grep { $_->position() eq    Engineer'   } ©employees,

Из массива @employees извлекаются только те объекты, для которых метод position() возвращает строку Engineer.

Grep позволяет выполнять и более сложные проверки:

@secondary_assistance = grep { $_->income >= 26_000 &&

$_->income < 30_000 } ©applicants,

Однако в таких ситуациях бывает разумнее написать цикл.

> Смотри также---------------------------------------------------------------------------------------------

Разделы «For Loops», «Foreach Loops» и «Loop Control» perlsyn(l); описание функции grep в perlfunc(l); страница руководства who(i) вашей системы (если есть); рецепт 4.12.

4.14. Числовая сортировка массива

Проблема

Требуется отсортировать список чисел, однако функция Perl sort (по умолчанию) выполняет алфавитную сортировку в ASCII-порядке.

Решение

Воспользуйтесь функцией Perl sort с оператором числового сравнения, опера­тор <=>:




- Начало -  - Назад -  - Вперед -