LISP 中的哈希表
哈希表是 Common LISP 中的一种集合,用于将键映射到值。任何非空对象都可以用作键或值。要从哈希表中成功存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
LISP 中哈希表的类型:
lisp 共有三种类型的哈希表,如下所示:
- eq :用于对 LISP 对象进行哈希表哈希时的比较。
- eql:当哈希表的哈希是在 LISP 对象上完成时,它也用于比较。
- equal:用于在 LISP 树结构上进行哈希表的哈希时进行比较。
在 LISP 中创建哈希表:
在 Common LISP 中使用make-hash-table函数来创建哈希表。
句法:
make-hash-table &key :test :size :rehash-size : rehash-threshold
这里,
- 键:-这是键名。
- :test:-用于确定密钥的比较方式。它采用上述三种类型的哈希表值之一(即 eq、eql、equal)。
- :size:-用于设置哈希表的初始大小。
- :rehash-size:-用于设置哈希表变满且需要添加更多数据时的大小增量。
- :rehash-threshold:-用于设置哈希表的最大大小,之后可以对其大小进行增量。
在 LISP 中从哈希表中添加和获取数据:
gethash函数用于从 LISP 中的哈希表中获取数据。
句法:
gethash key hash-table &optional default
这里,
- 键:它是键名。
- hash-table:它是哈希表的名称
- 默认值:它是返回类型。如果未设置,则在未找到该值时返回 nil。
setf函数与gethash函数一起使用,将数据添加到 LISP 中的哈希表中。
句法:
setf (gethash 'key hash-table-name) '(value)
这里,
- 键:它是键名。
- hash-table-name:哈希表的名称
- value:它是与键关联的值
示例:创建哈希表,添加数据并从中获取数据。
Lisp
; call make-hash-table function
(setq makeHashTable (make-hash-table))
; 1st entry
(setf (gethash 'gfg makeHashTable) '(Geeksforgeeks))
; 2nd entry
(setf (gethash 'DSA makeHashTable) '(Data Structure & Algorithms))
; output 1
(write (gethash 'gfg makeHashTable))
(terpri)
; output 2
(write (gethash 'DSA makeHashTable))
Lisp
; call make-hash-table function
(setq makeHashTable (make-hash-table))
; 1st entry
(setf (gethash 'gfg makeHashTable) '(Geeksforgeeks))
; 2nd entry
(setf (gethash 'DSA makeHashTable) '(Data Structure & Algorithms))
; output 1
(write (gethash 'gfg makeHashTable))
(terpri)
; output 2
(write (gethash 'DSA makeHashTable))
; remove 1st entry
(remhash 'gfg makeHashTable)
(terpri)
; output the first entry
(write (gethash 'gfg makeHashTable))
输出:
(GEEKSFORGEEKS)
(DATA STRUCTURE & ALGORITHMS)
从 LISP 中的哈希表中删除条目:
remhash函数用于从哈希表中删除键值条目。
句法:
remhash key hash-table
这里,
- key:它是密钥的名称。
- hash-table:它是要从中删除条目的哈希表的名称。
示例:这里我们将删除上一个示例中完成的第一个条目并打印出结果。
Lisp
; call make-hash-table function
(setq makeHashTable (make-hash-table))
; 1st entry
(setf (gethash 'gfg makeHashTable) '(Geeksforgeeks))
; 2nd entry
(setf (gethash 'DSA makeHashTable) '(Data Structure & Algorithms))
; output 1
(write (gethash 'gfg makeHashTable))
(terpri)
; output 2
(write (gethash 'DSA makeHashTable))
; remove 1st entry
(remhash 'gfg makeHashTable)
(terpri)
; output the first entry
(write (gethash 'gfg makeHashTable))
输出:
(GEEKSFORGEEKS)
(DATA STRUCTURE & ALGORITHMS)
NIL