У меня есть массив хэшей:В Perl, как я могу преобразовать массив хэшей в массив значений?
my @sports;
push @sports, { id=>1, name=>'Rugby' };
push @sports, { id=>2, name=>'Football' };
, и я хочу, чтобы получить массив всех имен (для отображения в контекстном меню CGI). Я попытался с помощью этого Grep заявления:
my @names = grep { $_->{name} } @sports;
, но он просто возвращает массив значений хэша ...
Так я в настоящее время прибегаю к использованию цикла для перебора всех значений, толкая их в другую массив.
Есть ли способ ускорить это?
Я знаю, что вы показываете все шаги, но вы можете пропустить временную переменную '@ names':' print map $ _-> {name}, @ sports'. –
@briandfoy - Скорее: 'print for map $ _-> {name}, @ sports' - иначе все виды спорта будут объединены в один« RugbyFootball ». Я использую 'print for LIST' много в комбинации с' -l' в командной строке, например: 'perl -lwe 'print для ключей сортировки% main ::" '. – Lumi
Спасибо! Я понимаю ваш аргумент скорости (в терминах обработки). Думаю, я мог бы лучше описать это как «меньше набрав». В зависимости от того, где я извлекаю данные, значит, у меня есть две петли в отдельных местах, чтобы создать массив имен. С картой я могу сделать это в одном месте – skeniver