LINUX.ORG.RU

Perl. Срез массива хешей по условию.

 


0

1

Подскажите, пожалуйста, как сделать срез массива хешей по условию проверки значения одного из ключей этих хешей?

К примеру, есть массив хешей:

my $a = 
[
   {
      Name => 'A'
   },
   {
      Name => 'B'
   }
]

Хочется выбрать тот хеш, где Name == 'A'. Знаю, что есть такая функция grep в Перле. Но никак не могу догнать, как ее применять.

Можете помочь разобраться?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

grep { exists $_->{Name} && $_->{Name} eq 'A' } @$a;

bjorn
()

Если нужен только первый найденный, то по аналогии с grep, но ф-цией List::MoreUtils::firstval или List::Util::first

Olegymous ★★★
()
Последнее исправление: Olegymous (всего исправлений: 1)

Первое - не используйте $a и $b. Эти переменные зарезервированы, в рантайме используются как аргументы встроенной функции sort.

Второе - про греп вам уже написали.

grep { exists $_->{'key'} && $_->{'key'} eq 'A' } @{ $array_ref };

Третье - List::UtilsBy (higher-order list utility functions). Модуль для удобной работы с агрегатами. Есть XS-версия.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

я не использую переменные $a и $b. :) Это я для краткости изложения написал.

Про греп всем спасибо. Разобрался. Рекомендованные библы погляжу.

bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.