[SP-pm] Dúvida sobre como "jogar" um array dentro de um hash.

"Flávio R. Lopes" flavio.lopes at links.inf.br
Wed Jul 21 19:44:39 PDT 2010


Em 21-07-2010 23:33, Thiago Glauco Sanchez escreveu:
> Em 21/07/2010 23:17, "Flávio R. Lopes" escreveu:
>> Aproveitando a oportunidade, teria jeito mais fácil do que este que 
>> eu fiz para juntar dois Arrays em um terceiro array, por exemplo:
> sim:
> push my @juncao, (@aray1, @array2);
>
> mas não resolve um problema de possível repetição de elementos.

Não resolve. Mas jogando o "@juncao" para um hash, aí cai no caso 
daquele email anterior.
Como o pessoal já me respondeu anteriormente, como um hash não permite 
duplicar as sua chaves, eu posso resolver este problema fazendo:

my  %hash = map { $_ => $_ } @juncao;

Aí dá certo (ou não?)!



>
>>
>> my @array1 = qw ( 4 5 6 7 );
>> my @array2 = qw ( 8 9 );
>>
>>     foreach my $elementos ( @array1, @array2 ) {
>>
>>         push @juncao_elementos, $elementos;
>>
>>     }
>>
>>
>>
>>
>> Em 21-07-2010 22:45, Daniel de Oliveira Mantovani escreveu:
>>> Você pode contar o tanto de vezes que aparece em seguida,
>>>
>>> use strict;
>>> use warnings;
>>> use Data::Dumper;
>>>
>>> my @numeros = ( 1, 2, 3, 4, 5, 6, 6, 6, 5 );
>>> my %hash = map { $_ =>  { $_ =>  ++$_{$_} } } @numeros;
>>>
>>> print Dumper %hash;
>>>
>>> <resultado>mantovani em mantovani-desktop:~$ perl foo.pl
>>> $VAR1 = '6';
>>> $VAR2 = {
>>>            '6' =>  3
>>>          };
>>> $VAR3 = '4';
>>> $VAR4 = {
>>>            '4' =>  1
>>>          };
>>> $VAR5 = '1';
>>> $VAR6 = {
>>>            '1' =>  1
>>>          };
>>> $VAR7 = '3';
>>> $VAR8 = {
>>>            '3' =>  1
>>>          };
>>> $VAR9 = '2';
>>> $VAR10 = {
>>>             '2' =>  1
>>>           };
>>> $VAR11 = '5';
>>> $VAR12 = {
>>>             '5' =>  2
>>>           };
>>> </resultado>
>>>
>>>
>>> 2010/7/21 "Flávio R. Lopes"<flavio.lopes em links.inf.br>:
>>>> Humm....
>>>>
>>>> Obrigado pessoal!
>>>>
>>>> Em 21-07-2010 21:41, Giuliani Sanches escreveu:
>>>>> Flávio,
>>>>>
>>>>> Hash não permite a duplicação de chaves. Ao adicionar o primeiro 6,
>>>>> ele simplesmente vai sobrescrevendo o conteúdo e como todos são 6,
>>>>> você tem o resultado obtido.
>>>>>
>>>>> []'s
>>>>>
>>>>> Em 21 de julho de 2010 21:31, "Flávio R. Lopes"
>>>>> <flavio.lopes em links.inf.br>    escreveu:
>>>>>
>>>>>> Olá pessoal.
>>>>>>
>>>>>> Num dos exercícios que estou fazendo, uma das soluções (pelo 
>>>>>> menos que
>>>>>> estou
>>>>>> imaginando) seria colocar o conteúdo de um array dentro de um 
>>>>>> hash, mas
>>>>>> quando os elementos são repetidos, só insere a primeira instância do
>>>>>> elemento.
>>>>>>
>>>>>> Supondo um array com os elements:
>>>>>>
>>>>>> my  @numeros = (1, 2, 3, 4, 5, 6, 6, 6, 5);
>>>>>>
>>>>>> my  %hash = map { $_ =>    $_ } @numeros;
>>>>>>
>>>>>>   while ( my ($chave, $valor) = each %hash ) {
>>>>>>
>>>>>>         say "$chave =>    $valor";
>>>>>>
>>>>>>   }
>>>>>>
>>>>>>
>>>>>> Tenho como saída:
>>>>>> 6 =>    6
>>>>>> 4 =>    4
>>>>>> 1 =>    1
>>>>>> 3 =>    3
>>>>>> 2 =>    2
>>>>>> 5 =>    5
>>>>>>
>>>>>>
>>>>>> Porque os outros dois elementos "6" e o último elemento "5" não são
>>>>>> armazenados dentro do hash?
>>>>>> Gostaria que produzisse a seguinte saída (como todos os 9 
>>>>>> elementos do
>>>>>> array):
>>>>>>
>>>>>> 6 =>    6
>>>>>> 6 =>    6
>>>>>> 6 =>    6
>>>>>> 4 =>    4
>>>>>> 1 =>    1
>>>>>> 3 =>    3
>>>>>> 2 =>    2
>>>>>> 5 =>    5
>>>>>> 5 =>    5
>>>>>>
>>>>>> Onde estou errando?
>>>>>>
>>>>>> Abraço,
>>>>>> Flávio
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> SaoPaulo-pm mailing list
>>>>>> SaoPaulo-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>



More information about the SaoPaulo-pm mailing list