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

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Wed Jul 21 19:00:30 PDT 2010


Eu quero aprender a fazer isso com o while na mesma linha do $_ sem
";', se eu não me engano eu vi isso em algum lugar.

perl -E '$_=join " => ", map { $_ => $_ } qw/1 2 3 4 5 5 6 6 6/; say
"$1 => $2" while s/(\d) => (\d)//'

[]'s


2010/7/21 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
> 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
>
>
>
> --
> http://www.danielmantovani.com
>
> "If you’ve never written anything thoughtful, then you’ve never had
> any difficult, important, or interesting thoughts. That’s the secret:
> people who don’t write, are people who don’t think."
>



-- 
http://www.danielmantovani.com

"If you’ve never written anything thoughtful, then you’ve never had
any difficult, important, or interesting thoughts. That’s the secret:
people who don’t write, are people who don’t think."


More information about the SaoPaulo-pm mailing list