hashes en perl

19
Hashes en perl Licenciatura en Ciencias Genómicas Febrero 2013 Semiramis Castro

Upload: maria-semiramis-castro-jaimes

Post on 30-Jul-2015

133 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Hashes en perl

Hashes en perl

Licenciatura en Ciencias GenómicasFebrero 2013

Semiramis Castro

Page 2: Hashes en perl

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.

Page 3: Hashes en perl

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.

Page 4: Hashes en perl

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()

Page 5: Hashes en perl

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;

Page 6: Hashes en perl

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”};

Page 7: Hashes en perl

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=();

Page 8: Hashes en perl

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

posibilidades:

foreachmapwhile/each

Page 9: Hashes en perl

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

Page 10: Hashes en perl

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

Page 11: Hashes en perl

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

Page 12: Hashes en perl

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

Podemos ordenar mediante llaves:ASCIIbeticamente.Alfabeticamente

O por valores

Page 13: Hashes en perl

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”;

Page 14: Hashes en perl

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.

Page 15: Hashes en perl

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

Page 16: Hashes en perl

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

Page 17: Hashes en perl

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: “@”.

Page 18: Hashes en perl

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

Page 19: Hashes en perl

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”