martes, 2 de abril de 2013

Perl: Tablas hash


Perl: Tablas hash

A continuación el manejo de tablas hash en Perl en forma resumida.
A diferencia de los arreglos, las tablas hash permiten el acceso por medio de índices llamados claves en vez de utilizar valores numéricos para acceder al contenido.
Una tabla hash contiene dos valores a los cuales se hacen referencia, la clave y el valor asociado a esa clave.
El libro Learning Perl 5,de Schwartz explica bastante bien el tema, los ejemplos han sido adaptados del mismo.
Al final del artículo un ejemplo para copiar/pegar e ir probando.

Inicializar una tabla hash

El símbolo porcentaje % se refiere a la tabla hash, ejemplo %tabla_hash.

Ejemplos de inicializaciones
my %tabla_hash=(
"fred"=>"flintstone",
"dino"=>undef,
"barney" =>"rubble",
"betty" =>"rubble",
);

Otra forma es definirlo como array organizando cada par clave-valor.
my %otra_tabla=(“clave1”, 1,”clave2”, 2, “clave3”, 3);

Acceder y asignar valores a una tabla hash

Para acceder al contenido de una tabla hash se invoca el valor de la clave.
$valor=$tabla_hash{$clave} Esto asigna el contenido de la tabla hash a una variable. Se utiliza las llaves para referenciar los valores.
$tabla_hash{$clave}=0 Para guardar el valor cero en la tabla hash.
$contador = keys %tabla_hash Contar el número de elementos de una tabla hash.


*** Especial atención a lo siguiente: el símbolo $ corresponde cuando se asignan valores en forma escalar. El signo % se utiliza para referirse a la tabla completa.


Funciones para tablas hash

keys, asigna a un arreglo el listado de claves de una tabla hash.
value, asigna a un arreglo el listado de valores de una tabla hash.

Uso de las funciones keys y values
my %tabla_hash = ("a" => 1, "b" => 2, "c" => 3);
my @claves = keys %tabla_hash;
my @valores = values %tabla_hash;


each Devuelve un par clave-valor, se utiliza para recorridos de una tabla hash.
while ( ($clave, $valor) = each %tabla_hash ) {
print "$key => $valor\n";
}


exists Verifica la existencia de una clave
if (exists $tabla_hash{"algo"}) {
print "existe en la tabla algo\n";
}



delete Borra un elemento de la tabla según un valor de clave asignado.
my $clave = "miclave";
delete $tabla_hash{$clave}; 

 ------------------------------ CORTAR AQUI  ------------------------------

#!/usr/bin/perl

use 5.006;
use strict;
use warnings;

############################################
# Manejo de tablas hash
# Ejemplos basados en Schwartz - Learning Perl 5
############################################
# Definir una tabla hash y recorrerla.
############################################

my %tabla_hash=(
    "fred"=>"flintstone",
    "dino"=>"nada",
    "barney" =>"violeta",
    "betty"    =>"rubble",
);

my ($clave, $valor,$unavariable,$otraclave);

############################################
#recorrer tabla hash
print "\n============= Recorrer una tabla has utilizando while ===================\n";
while (($clave,$valor)=each %tabla_hash){
    print "$clave -> $valor \n";
}

############################################
#otra forma de recorrerla
print "\n============= Otra forma de recorrer una tabla has utilizando foreach ===================\n";
foreach $clave (sort keys %tabla_hash){
    $valor=$tabla_hash{$clave};
    print "$clave -> $valor \n";    
}

#asignacion de un valor a la tabla hash
$unavariable=10;
$otraclave="dino"; #establece la clave a buscar
$tabla_hash{$otraclave}="amarillo";
print $tabla_hash{$otraclave}."\n";

 ------------------------------ CORTAR AQUI  ------------------------------

1 comentario: