📜  LISP 中的哈希表

📅  最后修改于: 2022-05-13 01:55:30.285000             🧑  作者: Mango

LISP 中的哈希表

哈希表是 Common LISP 中的一种集合,用于将键映射到值。任何非空对象都可以用作键或值。要从哈希表中成功存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

LISP 中哈希表的类型:

lisp 共有三种类型的哈希表,如下所示:

  1. eq :用于对 LISP 对象进行哈希表哈希时的比较。
  2. eql:当哈希表的哈希是在 LISP 对象上完成时,它也用于比较。
  3. 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