[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 18:45:20 PDT 2010


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."


More information about the SaoPaulo-pm mailing list