[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