hashes en perl
TRANSCRIPT
![Page 1: Hashes en perl](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/1.jpg)
Hashes en perl
Licenciatura en Ciencias GenómicasFebrero 2013
Semiramis Castro
![Page 2: Hashes en perl](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/8.jpg)
Conocer el contenido de un hashPara saber el contenido de un hash tenemos 3
posibilidades:
foreachmapwhile/each
![Page 9: Hashes en perl](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/12.jpg)
Ordenar el contenido de los hashesUsamos la función sort.
Podemos ordenar mediante llaves:ASCIIbeticamente.Alfabeticamente
O por valores
![Page 13: Hashes en perl](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.co/reader035/viewer/2022071706/55ba4a65bb61eba5148b4639/html5/thumbnails/19.jpg)
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”