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;
}
