Arreglos Asociativos
Se caracterizan por que se puede definir cualquier tipo de dato escalar como índice. El caracter $ se utiliza para refererirse a un elemento escalar y el caracter % para todos. Para asignar valores a un arreglo asociativo, se utilizan las llaves ({ }) alrededor de la clave de índice. Para referirse a un arreglo asociativo en su totalidad, se usa su nombre precedido del símbolo "%"; si por el contrario se desea acceder solamente a un elemento se usa el nombre del arreglo anteponiendo el símbolo "$". Si lo que se quiere es manipular las llaves o los valores se usa el símbolo "@" antes del nombre.
Sobre los arreglos asociativos se se realizan tres operaciones principales:
- obtener el valor asociado a una clave
- cambiar el valor asociado a una clave.
- verificar si una clave existe.
En el siguiente ejemplo se define un arreglo asociativo llamado stock con sus pares de clave-valor,
%stock = (limones => 6, peras => 3, uvas => 2);
A la estructura anterior se le pueden agregar ó modificar pares clave-valor de la siguiente forma
$stock{peras} = 9;
$stock{bananas} = 4;
Una forma de crear un arreglo asociativo es a partir de pares de datos clave-valor leidos de un archivo
Ejemplo:
open FILE, "frutas.txt" or die(“Error $!”);
while ([FILE]){
$linea = chomp($_); se elimina el fin de linea
@tmp = split(/\t/); # se separa el registo en campos
# (el tabulador es el delimitador)
$stock{$tmp[0]} = $tmp[1]; # se asigna par clave-valor
}
close FILE or die(“Error $!”);
Un par clave-valor se borra con
delete $stock{uvas};
Un arreglo completo se borra
undef %stock;
Para eliminar todas los pares claves-valor, pero no la estructura, se utiliza
%stock = ();
Para navegar una estructura se pueden utilizar varias formas. La instruccion foreach
permite recorrer la estructura de forma completa. La variable $clave se instancia con el valor de la clave.
foreach $clave (keys %stock) {
print "$clave = $stock{$clave}\n";
}
También con el elemento map, es posible listar las claves.
print map "$_ = $stock{$_}\n", keys %stock;
Se puede utilizar while y each para leer una arreglo asociativo
while (($key,$valor) = each %stock){ print "$key = $valor\n"; }
La función keys crea un arreglo indexado con las claves de un arreglo asociativo
%a = ( x => 5, y => 3, z => 'abc' );
@b = keys %a # @b se instancia con ( 'x', 'y', 'z');
La función values devuelve un arreglo indexado con los valores de arreglo asociativo
%a = ( x => 5, y => 3, z => 'abc' );
@v = values %a # @v se instancia con con ( 5, 3, 'abc' );
La función exists prueba si existe una clave en un arreglo asociativo
%a = ( x => 5, y => 3, z => 'abc' );
$b = exists $a{z}; # $b se instancia con 1, es verdadero
$c = exists $a{w}; # $c queda con "", es falso
Es posible ordenar una estructura. Para Perl existen tres formas: por orden ASCII, numericamente o alfabeticamente.
%hash = (Apples=>1, apples=>4, artichokes=>3,Beets=> 9,);
foreach my $key (sort keys %hash) { print "$key = $hash{$key}\n"; }
La salida será
Apples = 1
Beets = 9
apples = 4
artichokes = 3
A los efectos ordenar alfabéticamente se puede utilizar la función lc (convertir a minúsculas) y el operador de comparación cmp.
foreach my $key (sort {lc($a) cmp lc($b)} keys %hash) {
print "$key = $hash{$key}\n";
}
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario