📜  LISP 中的哈希表(1)

📅  最后修改于: 2023-12-03 14:44:00.731000             🧑  作者: Mango

LISP中的哈希表

LISP是一种基于列表结构的编程语言,它内置了许多基本数据结构,其中哈希表(hash table)是一种非常有用的数据类型。哈希表(又称散列表)是一种能够以O(1)时间复杂度进行查找、插入和删除的数据结构。在LISP中,哈希表可以使用make-hash-table函数进行创建。

创建哈希表

使用make-hash-table函数可以创建哈希表,其参数为哈希表的属性列表,其中test属性定义了哈希表中键的比较函数,:size属性定义了哈希表的初始大小:

(setq my-hash (make-hash-table :test 'equal :size 100))
添加、查找和删除键值对

使用gethash函数可以获取哈希表中指定键的值,使用puthash函数可以添加或修改键值对,使用remhash函数可以删除指定键值对。以下是使用哈希表的示例:

; 添加键值对
(puthash "key1" "value1" my-hash)
(puthash "key2" "value2" my-hash)

; 获取键值对
(gethash "key1" my-hash) ; "value1"

; 删除键值对
(remhash "key2" my-hash)
(gethash "key2" my-hash) ; nil
遍历哈希表

使用maphash函数可以遍历哈希表中的所有键值对,其参数为一个函数,该函数接收两个参数,分别为键和值:

; 遍历哈希表
(maphash (lambda (k v) (print (format nil "key: ~A, value: ~A" k v))) my-hash)
; 输出:
; "key: key1, value: value1"
更多属性和函数

在LISP中,哈希表还有其他许多属性和函数,如rehash-sizerehash-thresholdhash-table-p等。使用这些属性和函数可以更好地控制哈希表的大小和性能。

总结

哈希表是LISP中非常有用的数据类型之一,它可以以O(1)时间复杂度进行查找、插入和删除。可以使用make-hash-table函数创建哈希表,使用gethash函数获取指定键的值,使用puthash函数添加或修改键值对,使用remhash函数删除指定键值对,使用maphash函数遍历哈希表中的所有键值对。除此之外,还有许多其他有用的属性和函数可以使用。