Быстро отфильтруйте perl-хэш хэшей - PullRequest
6 голосов
/ 06 сентября 2010

У меня есть perl-хэш хэшей, подобный следующему:

$VAR1 = {
          'ID_1' => {
                           'FILE_B' => '/path/to/file/file1',
                           'FILE_C' => '/path/to/file/file2',
                           'FILE_A' => '/path/to/file/file3'
                         },
          'ID_2' => {
                           'FILE_B' => '/path/to/file/file4',
                           'FILE_A' => '/path/to/file/file5'
                         },
          'ID_3' => {
                           'FILE_B' => '/path/to/file/file6',
                           'FILE_A' => '/path/to/file/file7'
                         }
          ...                       
}

Я хотел бы получить список всех ключей членов в основном хэше, для которых определено FILE_C.В примере это вернет только ID_1.

Я знаю, как сделать это в громоздком цикле (перебирая все ключи, проверяя, определено ли FILE_C, если да - подталкивая ключ в массив, наконец, возвращая этот массив), но у меня есть ощущение, что для этого есть однострочная или даже функция…

1 Ответ

15 голосов
/ 06 сентября 2010

Да, Perl имеет функцию grep :

my @keys = grep { defined $hash{$_}{FILE_C} } keys %hash;

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