[Cascavel-pm] Outro probleminha....
Nelson Ferraz
nferraz em phperl.com
Sábado Outubro 4 13:46:00 CDT 2003
>>Arquivo de Entrada:
>>
>>Joseh
>>Claudia
>>Joseh
>>Lucia
>>Adriano
>>Maneh
>>Claudia
>>Lucia
>>Joseh
>>Joseh
>>Maneh
>>
>>Arquivo de Saida:
>>
>>Adriano 1
>>Claudia 2
>>Lucia 2
>>Joseh 4
>>Maneh 2
>
> - em uma linha:
>
> perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort
Permita-me apenas desenvolver um pouco mais a explicação.
Sempre que você encontrar um problema deste tipo, calcular a quantidade
de cada item em uma lista, você deve pensar automaticamente em um hash.
foreach (@nome) {
$count{$_}++;
}
Após este loop você terá a seguinte estrutura:
%count = (
'Lucia => 2,
'Adriano' => 1,
'Joseh' => 4,
etc.
);
No exemplo do Flavio Glock, ele está obtendo as informações diretamente
da entrada padrão:
while (<>) {
chomp;
$count{$_}++;
}
O próximo passo é ordenar o hash por valor:
@keys = sort {
$count{$a} cmp $count{$b}
} keys %count;
http://www.perldoc.com/perl5.8.0/pod/perlfaq4.html#How-do-I-sort-a-hash-(optionally-by-value-instead-of-key)-
E então, imprimir os resultados:
foreach (@keys) {
print "$_\t$count{$_}\n";
}
--
[]s
Nelson
________________________________________________________________
Nelson Ferraz
GNU BIS: http://www.gnubis.com.br
PhPerl: http://www.phperl.com
Mais detalhes sobre a lista de discussão Cascavel-pm