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


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


Если нас интересует значение первого найденного элемента, присвойте его пе­ременной $match. Мы не можем просто проверять $item в конце цикла, потому что f о reach автоматически локализует1 переменную-итератор и потому не позволяет узнать ее последнее значение после завершения цикла (см. рецепт АЛ)

Рассмотрим пример. Предположим, в массиве @employees находится список объектов с информацией о работниках, отсортированный в порядке убывания ок­лада. Мы хотим найти инженера с максимальным окладом; это будет первый ин­женер в массиве. Требуется только вывести имя инженера, поэтому нас интересу­ет не индекс, а значение элемента.

foreach $employee  (©employees)  {

if (  $employee->category() eq    engineer    )  { $highest_engmeer = Semployee last,

print Highest paid engineer is  , $highest_engineer->name(), \n ,

1 Термин «локализация» по отношению к переменной означает придание ей локальной области дей­ствия — Примеч перео


136   Глава 4 • Массивы

Если нас интересует лишь значение индекса, можно сократить программу — достаточно вспомнить, что при неудачном поиске $i будет содержать недопусти­мый индекс. В основном экономится объем кода, а не время выполнения, посколь­ку затраты на присваивание невелики по сравнению с затратами на проверку элементов списка. Однако проверка условия if ($i < ©ARRAY) выглядит не­сколько туманно по сравнению с очевндной проверкой defined из приведенного выше решения.

for ($1 =0, $1 < ©ARRAY, $l++) {

last if $cnterion, } If ($1 < @ARRAY) {

## Критерий выполняется по индексу $1 } else {

## Неудачный поиск

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

Разделы «For Loops», «Foreach Loops» и «Loop Control»perlsyn(l); описание функции grep вperlfunc(l).

4.13. Поиск всех элементов массива, удовлетворяющих определенному критерию

Проблема

Требуется найти все элементы списка, удовлетворяющие определенному крите­рию.

Проблема извлечения подмножества из списка остается прежней. Вопрос за­ключается в том, как найти всех инженеров в списке работников, всех пользова­телей в административной группе, все интересующие вас имена файлов и т. д.




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