[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