[Cascavel-pm] Gerar lista...

Luis Motta Campos luismottacampos em yahoo.co.uk
Sexta Agosto 3 03:51:37 PDT 2007


On Aug 2, 2007, at 8:31 PM, Nelson Ferraz wrote:
> On Aug 2, 2007, at 6:54 PM, Rafael Lebrão Martins wrote:
>> Neste caso, como extrair da "lista 2" apenas as palavras que não
>> contêm na lista "@array" e guardá-las numa terceira lista??
>
> Esse tipo de problemas (verificar a intersecção ou diferença entre
> dois conjuntos) é resolvido com hashes.

   Sim, Nélson... com hashes, hash-slices, não com foreach... ;-)
   Eu "patcheei" o teu problema um pouquinho... ;-)
   Dominar manipulação de arrays, listas e hashes é uma coisa muito  
importante se você quer ser faixa-preta em perl, Rafael. ;-) Se você  
não entender o que eu fiz, por favor sinta-se à vontade para perguntar.

   A pesar de não ser intuitivo, /delete/ é uma palavra-chave do perl  
poderosíssima para manipular hashes. Ela está listada no manual  
online do perl, leia "perldoc -f delete" para os detalhes sujos ;-)

> 	my @list1 = qw( foo bar baz );
> 	my @list2 = qw( foo bar lalala );
> 	my %hash1 = map( ( $_ => 1 ), @list1 );
> 	my %hash2 = map( ( $_ => 1 ), @list2 );
>
> 	# agora trabalhamos com os conjuntos
>
> 	my %uniao = (%hash1, %hash2);
>
>         my %diferenca = %hash2;
>         my %interseccao = delete @diferenca{ @list1 };
>         # %diferenca agora contem os valores de 2 que não estão em 1
>
> 	# foreach (keys %uniao ) {
> 	#     if ( $hash1{$_} && $hash2{$_} ) {
> 	#         $interseccao{$_} = 1;
> 	#     } else {
> 	#         $diferenca{$_} = 1;
> 	#     }
> 	# }
>
> 	# imprime os resultados
>
> 	print "hash1: ", join(",", keys %hash1), "\n";
> 	print "hash2: ", join(",", keys %hash2), "\n";
>
> 	print "Uniao: ", join(",", keys %uniao), "\n";
>
> 	print "Diferenca: ", join(",", keys %diferenca), "\n";
> 	print "Interseccao: ", join(",", keys %interseccao), "\n";

--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão Cascavel-pm