Opa,<br><br>isso é realmente instigante a não ser que você se acostume :P hehe<br><br>Bom, usaremos o operador <=> que é utilizado para comparações de valores numéricos junto ao comando sort. Para a comparação de strings utilizar-se-á o operador 'cmp'.
<br><br>Como é ordem crescente então será usado $a <=> $b, onde $a e $b são variáveis especiais usadas pelo sort e contêm os valores dos itens que estão sendo comparados.<br><br>Para um melhor entendimento:<br>---------------------------8<---------------------------
<br>print "Variáveis \$a e \$b dentro do comando sort:\n";<br>%hash = ("AA",5,"CB",2,"BA",10,"TG",3);<br>foreach ( sort {print "$a $b\n";} keys %hash ){}<br>--------------------------->8---------------------------
<br>* O exemplo acima só exibe como a comparação é feita.<br><br>O conceito é simples, para cada comparação é retornado um valor que poderá ser -1 ($a tem valor inferior a $b), 0 ($a e $b possuem valores identicos) e 1 ($a tem valor superior ao de $b). Note que o uso de $b <=> $a faz a comparação reversa.
<br><br>Feitas as comparações necessárias, teremos o resultado:<br>---------------------------8<---------------------------<br>%hash = ("AA",5,"CB",2,"BA",10,"TG",3);<br>
foreach ( sort {$a cmp $b} keys %hash ){ print "$_\n";}<br>
--------------------------->8---------------------------<br>
* Uso do cmp por estarmos comparando as strings.<br><br><br>Por fim, queremos comparar os valores; logo temos que: como $a e $b contêm o valor do item, no caso do uso sobre o keys %hash conterá o nome de cada chave percorrida, então usaremos $hash{$a} e $hash($b} que resultará no valor referente de cada uma das chaves.
<br><br>---------------------------8<---------------------------<br>%hash = ("AA",5,"CB",2,"BA",10,"TG",3);<br><br>print "Pelas Chaves\n";<br>print "$_ - $hash{$_}\n" foreach sort keys %hash;
<br><br>print "\nPelos Valors\n";<br>print "$_ - $hash{$_}\n" foreach sort {$hash{$a} <=> $hash{$b}} keys %hash;<br>--------------------------->8---------------------------<br><br>É isso.<br><br>
Simples como um oi. ;D<br><br>Abraços,<br><br><div><span class="gmail_quote">On 2/16/07, <b class="gmail_sendername">Wagner Arbex</b> <<a href="mailto:arbex@email.com.br">arbex@email.com.br</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Prezados colegas;<br><br>Apesar de ser um programador com razoável tempo de estrada, comecei a<br>trabalhar com Perl muito recentemente... estou no início mesmo.<br><br>Assim, estou aprendendo o caminho das pedras, principalmente me
<br>acostumando com a sintaxe e com a idéia de que "existe mais e uma<br>maneira de fazer", além disso, tb estou muito impressionado com o que<br>posso fazer e com a flexibilidade que tenho com poucas linhas de<br>
código.<br><br>Tenho uma dúvida de iniciante que já pesquisei bastante, mas não acho<br>a resposta. Parece ser uma dúvida ridícula, mas...<br><br>A questão é que tenho um hash bastante simples, por ex:<br><br>%hash1 = ("AA",0,"CB",0,"BA",0,"TG",0);
<br><br>Durante a execução do programa os valores "0" são alterados, ficando, por ex:<br><br>("AA",5,"CB",2,"BA",10,"TG",3)<br><br>e algumas vezes preciso imprimir o hash ordenado pelo índice e então faço:
<br><br>foreach $n (sort keys %hash1) {<br><br> print ...<br><br>}<br><br>e obenho o resultado esperado, p ex:<br><br>AA - 5<br>BA - 10<br>CB - 2<br>TG - 3<br><br>Mas o que eu não estou conseguindo fazer é imprimir o hash ordenado
<br>pelo valor e não pelo índice. Ou seja, precisava da seguinte saída:<br><br>CB - 2<br>TG - 3<br>AA - 5<br>BA - 10<br><br>Desde já, aagradeço qq ajuda.<br><br>[]s e obrigado<br>Arbex<br><br>--<br> Wagner Arbex<br>_______________________________________________
<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org">Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div>
<br><br clear="all"><br>-- <br>Gabriel Vieira