Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos

Comunidade

r1 - 06 Aug 2006 - JoenioCosta

Como pesquisar os valores de um hash?

Problema

Você gostaria de pesquisar os valores (e não as chaves!) de um hash.

Solução

Crie um hash reverso.

Discussão

Para criar um hash reverso:

    %by_value = reverse %by_key;
    $key = $by_value{$value};

Isso pode não ser muito eficiente por duplicar a quantidade de dados. Se isso for um problema, você pode simplesmente processar uma chave e valor de cada vez:

     while (($key, $value) = each %by_key) {
        $by_value{$by_key{$_}} = $key;
     }

Se o seu hash tiver valores repetidos, os métodos acima encontrarão apenas uma das chaves. Isso pode ou não ser o que você deseja. Se você quiser guardar todas as chaves, pode criar um hash de arrays:

     while (($key, $value) = each %by_key) {
         push @{$key_list_by_value{$value}}, $key;
     }

Comentários