[SP-pm] sort
Eden Cardim
edencardim em gmail.com
Terça Janeiro 23 11:08:35 PST 2007
On 1/23/07, Thomas Britis <thomas em tcnet.com.br> wrote:
> Eden,
>
> Obrigado pela resposta.
>
> Porém, o uso do %ENV foi apenas exemplificativo. O que acontece na
> prática é o seguinte:
>
> Eu tenho um programa que carrega as informações em um hash da seguinte
> forma:
>
> $hash[$count] = ({ campo => valor });
>
> E, é claro que tenho diversos campos e diversos valores para cada campo.
> O que quero é ordenar por um dos campos existentes.
Ainda acho que você não precisa do hash de hashes. Porque não carregar
os dados num array, já que o índice é numérico?
> Hoje, o que eu faço é:
> $campo{$count} = $valor;
> @result = sort { $campo{$a} cmp $campo{$b} } keys %campo;
>
> e depois de fazer o sort eu gero novamente a hash, porém considero isso
> uma perda de tempo pois o resultado, como vc mesmo disse, é uma array.
> Preciso então comparar o resultado com o valor na hash e ordenar.
> Imagino que deva haver maneira de se fazer isso de forma mais simples.
Assumindo que os dados tão carregados num array:
my @sorted = sort{$_->{$campo} <=> $_->{$campo} } @dados;
foreach my $item (@sorted) {
print $item->{campo1};
print $item->{campo2};
#etc...
}
Se quiser continuar usando um hash de hashes, use a "tranformação
schwartziana", para não perder a associação entre chaves e valores.
--
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática
--
"you seem to think that 'close enough' is close enough...
please learn to be 'literal' around programming."
merlyn - on irc.freenode.net#perl
Mais detalhes sobre a lista de discussão SaoPaulo-pm