hashes en perl

Post on 30-Jul-2015

133 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Hashes en perl

Licenciatura en Ciencias GenómicasFebrero 2013

Semiramis Castro

DefiniciónSon arreglos asociativos “llave/valor”.

La llave será la “etiqueta” de un valor que le asignaremos, como la ‘posición’ en un vector.

Lo que suele usarse como llaves son cadenas de texto, aunque también pueden usarse valores numéricos.

Creación

Para crear un hash necesitaremos de este caracter: “%” seguido del nombre del hash (un nombre significativo) seguido de un igual y paréntesis y entonces podremos asignar pares llave/valor. Hay distintas maneras de hacerlo.

CreaciónEjemplos:

my%hash1=(“ATGC”=>4, “CCGTA”=>5);my%hash2=(“ATGC”, 6, “CCGTA”,5);my%hash3=qw(ATGC 4 CCGTA 5);#las comillas no son necesarias cuando usamos la función

qw()

Asignación de hashes individualmenteSi queremos agregar otro hash, o cambiar el valor de

alguno, entonces podemos hacer lo siguiente:

my$hash {nombre de la llave}=valor asignado;

Ejemplo:$hash{“GGTAC”}=4;

EliminaciónPara quitar un par llave/valor, tendremos que poner:

delete$hash{nombre de la llave};NOTA: al eliminar la llave, ésta también se irá con el valor

asignadoEjemplo:delete$hash{“GGTAC”};

EliminaciónAhora, si se quieren quitar todos los pares, pero dejando

inactivo al hash, usamos:undef%hash;

Pero si queremos dejar activo al hash, usamos:%hash=();

Conocer el contenido de un hashPara saber el contenido de un hash tenemos 3

posibilidades:

foreachmapwhile/each

usando foreachIteramos como si fuera un vector

foreach my $llave(keys %hash){ print “$llave=$hash{$llave}\n”; }

NOTA: la función keys nos da las llaves del hash

usando mapprint map “$_=$hash{$_}\n”, keys %hash;

la función map nos regresará por medio de la variable ‘default’ $_ los elementos de la estructura que le estamos mandando

usando while/eachwhile(($llave, $valor) = each % hash) { print “$llave=$valor\

n”;}

La función each nos regresará una lista de dos elementos con los pares llave-valor

Ordenar el contenido de los hashesUsamos la función sort.

Podemos ordenar mediante llaves:ASCIIbeticamente.Alfabeticamente

O por valores

ASCIIbéticamenteAquí lo que haremos será ordenar de acuerdo al valor

ASCII de las llaves, esto tomará en cuenta mayúsculas y minúsculas.

Ejemplo:

my%hash=(AGTC=>5,AgtC=>8);foreach my$llave (sort keys % hash) {print

“$llave=$hash{$llave}\n”;

AlfabéticamenteOrdenaremos las llaves si todos tienen el mismo tipo de

letra, es decir todas minúsculas o todas mayúsculas.

Ejemplo:

my%hash=(AGTC=>4, AGTG=>5);foreach my $llave (sort {$a cmp $b} keys %hash) {print

“$llave=$hash{$llave}\n”; } #imprimiría. AGTC=4, AGTG=5.

Ordenando por valoresOrdenación numérica:my%hash=(ATCGG=>4, AGGTCG=>5);foreach my $llave(sort{$hash{$a} <=> $hash{$b}} keys

%hash){print “$llave=$hash{$llave}\n”;}

Usamos el operador <=> para comparar números. Puede regresar -1, 0, 1

Ordenando por valoresOrdenación con letras:my%hash=(ATCGG=>TAGCC, GATTC=>CTAAC);foreach my $llave(sort{$hash{$a} cmp $hash{$b}} keys

%hash{print “$llave=$hash{$llave}\n”;}

Usamos cmp para comparar cadenas. Puede regresar -1, 0, 1

Rebanadas de Hash

Podemos seccionar (“rebanar”) al hash, extrayéndole los valores que queramos saber de algunas llaves.

Para nombrar a las rebanadas usamos el símbolo: “@”.

Rebanadas de HashEjemplo: my%hash=(ATTTA=>5, TTTGCTG=>7, TATACGTAT=>9);my@array=@hash{“ATTTA”, “TTTGCTG”}; print (@array); #esto imprimiría 5 y 7 que, son los valores del array

Hashes multidimensionalesEn ellos podemos asignarle otras estructuras a una llave,

como vectores e incluso hashes.

Ejemplo:my%hash=(ATGCGG=>{AGGCCGG=>6, AGTCCGT=>7},

ATTG=>{AGCT=>8,CCCT=>10});print $hash{ATTG}{CCCT};#nos imprimirá “10”

top related