[ << Tutorial de Scheme ] | [Top][Contents][Index] | [ Interfaces para programadores >> ] |
[ < Listas asociativas (listas-A) ] | [ Up : Tipos de datos compuestos de Scheme ] | [ Cálculos en Scheme > ] |
Tablas de hash
Estructuras de datos que se utilizan en LilyPond de forma ocasional. Una tabla de hash es similar a una matriz, pero los índices de la matriz pueden ser cualquier tipo de valor de Scheme, no sólo enteros.
Las tablas de hash son más eficientes que las listas-A si hay una gran cantidad de datos que almacenar y los datos cambian con muy poca frecuencia.
La sintaxis para crear tablas de hash es un poco compleja, pero veremos ejemplos de ello en el código fuente de LilyPond.
guile> (define h (make-hash-table 10)) guile> h #<hash-table 0/31> guile> (hashq-set! h 'key1 "val1") "val1" guile> (hashq-set! h 'key2 "val2") "val2" guile> (hashq-set! h 3 "val3") "val3"
Los valores se recuperan de las tablas de hash mediante
hashq-ref
.
guile> (hashq-ref h 3) "val3" guile> (hashq-ref h 'key2) "val2" guile>
Las claves y los valores se recuperan como una pareja con
hashq-get-handle
. Ésta es la forma preferida, porque
devuelve #f
si no se encuentra la clave.
guile> (hashq-get-handle h 'key1) (key1 . "val1") guile> (hashq-get-handle h 'frob) #f guile>