Hashings de perl

by

São os array associativos.
As variáveis hashings são precedidas de %.

%idade = ();  # Cria uma hashing vazio.
%idade = ('jabuti', 80, 'rato', 3, 'cobra', 6);
# Outra maneira de fazer o mesmo acima.
%idade = (tuatara => 35, cachorro => 12, harpia => 40);
%idade{elefante} = 70;

Usando o operador => não é necessário usar aspas, no item a direita

Para acessar os dados de um hashing devemos usar o { e } para indicar o índice e $ precedendo a variável.

$idade_animal = $idade{jabuti};

Podemos acessar os índices dos hashings usando a função key.

# @animais agora é ('harpia', 'tuatara', 'cobra', 'elefante', 'rato', 'cachorro', 'jabuti').
@animais = keys %idade;

Há uma função parecida para os valores.

# @tempo_vida agora é (40, 35, 6, 70, 3, 12, 80).
@tempo_vida = values %idade;

Each retorna uma lista de dois elementos, contendo uma chave do hashing junto com o seu valor associado. Chamadas subsequentes  para each retornarão outro par de chave/valor até que todos os pares tenha sido retornados, nesse ponto, um array vazio será retornado.

while ( ($nome, $vida) = each %idade) ) {
print "$nome vive $vida anos\n";
}

Para saber o tamanho de um hashing basta atribuir a um scalar usando a função keys.

# o valor de $quantidade_animais é 3.
$quantidade_animais = keys %idade;

Para acessar partes de um hashing usa se a sintaxe abaixo:

# Mostra a idade da tartaruga.
$mais_velho = {'tartaruga'};

Da mesma forma que é possível dar valores a um hashing, usando uma lista é possível usar a função map para tranformar uma lista num hashing. Por exemplo, o código a seguinte cria uma hashing em que a as chaves são números e os valores seus quadrados.

%quadrado = map { $_ => ($_ * $_) } @numeros;

Segue abaixo um programa que mostra o funcionamento da variável hashing:


  1 #!/usr/bin/perl
  2
  3 use warnings;
  4 use strict;
  5
  6 my %idade;
  7 my $nome;
  8 my $idade;
  9 my $animal;
 10 my @animais;
 11 my $quantidade_animais;
 12 my %mais_velho;
 13 my @mais_velho;
 14 my %quadrado;
 15 my @numeros;
 16 my $numero;
 17 my $quadrado;
 18
 19 # Cria uma hashing vazio
 20 print "Hashing vazio:\n";
 21 %idade = ();
 22 print %idade;
 23
 24 print "\n\n";
 25
 26 # Cria um hashing com a idade dos animais usando sintaxe de virgulas
 27 print "Idade dos animais: \n";
 28 %idade = ('jabuti', 80, 'rato', 3, 'cobra', 6);
 29 while (($nome, $idade) = each %idade){
 30   print "-$nome pode viver até os $idade anos\n";
 31 }
 32
 33 print "\n\n";
 34
 35 # Adiciona mais itens ao hashing exitente usando a sintaxe de =>
 36 print "Idade dos animais: \n";
 37 %idade = (%idade, (tuatara => 35, cachorro => 12, harpia => 40));
 38 while (($nome, $idade) = each %idade){
 39   print "-$nome pode viver até os $idade anos \n";
 40 }
 41
 42 print "\n\n";
 43
 44 # Adiniciona item individualmente
 45 print "Idade dos animais:\n";
 46 $idade{elefante} = 70;
 47 while (($nome, $idade) = each %idade){
 48   print "-$nome pode viver até os $idade anos \n";
 49 }
 50
 51 print "\n\n";
 52
 53 # Acessando os dados de um hashing específicado pelo índice
 54 $animal = 'jabuti';
 55 print "A média de vida do $animal é de $idade{$animal} anos \n";
 56
 57 print "\n\n";
 58
 59 # Acessando as chaves do hashing
 60 print "Os animais são:\n";
 61 @animais = keys %idade;
 62 foreach (@animais){
 63   print "-$_ \n";
 64 }
 65
 66 print "\n\n'";
 67
 68 # Acessando os valores
 69 print "A idades dos animais:\n";
 70 @animais = values %idade;
 71 foreach (@animais){
 72   print "-$_ \n";
 73 }
 74
 75 print "\n\n";
 76
 77
 78 # Pegando o tamanho de um hashing
 79 print "Quantidade de animais:\n";
 80 $quantidade_animais = keys %idade;
 81 print $quantidade_animais;
 82
 83 print "\n\n";
 84
 85 # Acessando parte de um hashing
 86 print "Animais que vivem mais tempo:\n";
 87 @mais_velho = ('jabuti', 'elefante');
 88 foreach (@mais_velho){
 89   $mais_velho{$_} = $idade{$_};
 90 }
 91 while (($nome, $idade) = each %mais_velho){
 92   print "-$nome vive $idade anos\n";
 93 }
 94
 95 print "\n\n";
 96
 97 # Montando uma lista contendo o quadrado dos números
 98 @numeros = (1, 2, 3, 4, 5, 6);
 99 %quadrado = map { $_ => ($_ * $_) } @numeros;
100 while (($numero, $quadrado) = each %quadrado){
101   print "O quandrado de $numero é $quadrado \n";
102 }

Anúncios

Tags:

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: