otronovato escribiste:El caso es que voy viendo que no sé cuándo debo utilizar un hash() y cuándo es preferible usar arrays.
Los
array es cuando tienes una lista de elementos que, en su concepto, están unos al lado de otros, o forman una secuencia (al menos en su mayor parte). Por eso luego podemos referirnos a ellos usando los índices numéricos. O también cuando solo queremos almacenar o recuperar elementos sin más, como el caso de usar push/pop/shift/unshift.
El símil serían las distintas páginas de un libro: podemos acceder a cada página con tan solo usar el número de página. Y también podemos pasar las páginas hacia adelante y hacia atrás. Podemos desarmar el libro (shift) y volverlo a componer (push).
En cambio, un
hash es cuando una clave se relaciona con un valor (esto es lo que es un
hash en sí). En el caso del libro, sería el índice alfabético que está al final. Un
hash sería capaz de responder a la pregunta "¿En qué páginas aparece la palabra 'Perl'?". Iríamos al final del libro, buscaríamos por 'Perl', y al lado aparece el listado de páginas donde aparece esa palabra. Algo así:
Using perl Syntax Highlighting
my @páginas_con_Perl = @{ $índice{'Perl'} }; # %indice es un hash de arrays
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
También nos sirve para recordar cosas. Primero, aprendemos:
Using perl Syntax Highlighting
my %fechas_en_el_archivo;
...;
# leemos las fechas
while (....) {
...;
$fechas_en_el_archivo{ $fecha } = 1; # realmente, no importa el valor, con tal de ser positivo
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y luego vemos si otra fecha estaba en el archivo:
Using perl Syntax Highlighting
if (exists $fechas_en_el_archivo{ $otrafecha } ) {
...;
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Fíjate que aquí nos ahorramos el clásico bucle de comprobación por todas las fechas leídas antes. Perl se encarga de buscar $otrafecha dentro del
hash y devolvernos el valor correspondiente, pero a nosotros nos da igual ese valor. Solo nos interesa saber si $otrafecha existe como clave o no, porque para nosotros significará que esa $otrafecha sí que la hemos visto antes en el archivo anterior.
También sirve para hacer traducciones, como lo estás haciendo en tus programas, en que conviertes de letra a número y al revés. En fin, se puede usar para muchas cosas.
Para entender mejor lo que es esto de los
hash, primero mírate la definición de
Función hash y luego vas a
Tabla hash. Si entiendes cómo funciona por dentro, verás más fácil sus posibles usos.
En
perldata tienes ejemplos de acceso a los dos.
otronovato escribiste:¿No tendréis un cuaderno de ejercicios?
Yo ahora estoy leyendo "Learning_Perl-6Ed-brian_d_foy-Tom_Phoenix-Randal_L_Schwartz-O_Reilly-9781449303587-2011", porque en noviembre tengo que dar un curso en Madrid
A este libro se le puede acompañar un cuaderno de ejercicios para los alumnos, el "Student_Workbook_for_Learning_Perl-2Ed-brian_d_foy-O_Reilly-9781449328061-20120125".