Según tengo entendido por el manual (últimos párrafos de http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Hash.html ) y la pregunta /programming/11745097 / en stackoverflow, se puede guardar una versión impresa de una tabla hash en el disco para cargarla para su uso posterior.
Por ejemplo, la versión impresa de una tabla hash creada por
(setq ht (make-hash-table :test 'equal))
(puthash "orange" 1 ht)
(puthash "apple" 2 ht)
es como sigue
#s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("orange" 1 "apple" 2))
¿Es esta versión impresa el mejor formato (por consideración de velocidad) que Emacs puede usar? ¿Existe un procedimiento especial para volver a formatear (compilar en bytes, cambiar) el formato impreso anterior a un formato mejor (quizás solo legible por máquina) para que Emacs cargue esta tabla hash más rápido. Si la respuesta es afirmativa, ¿cuáles son las formas de hacerlo?
fuente
Tendrá que hacer hash e insertar cada valor sin importar qué, y a menos que esté lidiando con enormes tablas de hash, el tiempo empleado realmente no debería importar. Sin embargo, si sus tablas son grandes, entonces debe usar el
:size
parámetro paramake-hash-table
que no se produzcan reasignaciones. Cuando una tabla hash alcanza el umbral, tener que reasignar un nuevo lugar en la memoria para poner los valores y volver a mostrar todas las entradas actuales será una gran pérdida de rendimiento.Si sabe que está a punto de insertar 1 millón de entradas en una tabla hash, use
(make-hash-table :size 1000000)
Considere el siguiente punto de referencia:
También puede definir su propia prueba y función hash para tablas hash. Si sabe que sus claves van a estar en un conjunto específico, podría escribir una igualdad más rápida y funciones de hashing que exploten eso. Ver:
define-hash-table-test
.fuente
#s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8 data ("orange" 1 "apple" 2 ..............))
. Puedo cargar esta tabla hash. Me interesó saber si este tipo de archivo es el mejor formato que Emacs puede usar para cargar rápidamente la tabla.