LISP - 哈希表(Hash Table)
-
简述
哈希表数据结构代表了一个集合key-and-value根据密钥的哈希码组织的对。它使用键访问集合中的元素。当您需要使用键访问元素时使用哈希表,您可以识别一个有用的键值。哈希表中的每个项目都有一个键/值对。密钥用于访问集合中的项目。 -
在 LISP 中创建哈希表
在 Common LISP 中,哈希表是一个通用的集合。您可以使用任意对象作为键或索引。当您将值存储在哈希表中时,您会创建一个键值对,并将其存储在该键下。稍后您可以使用相同的键从哈希表中检索值。每个键都映射到一个值,尽管您可以在键中存储一个新值。根据比较键的方式,LISP 中的哈希表可以分为三种类型——eq、eql 或 equal。如果散列表在 LISP 对象上进行散列,则将键与 eq 或 eql 进行比较。如果散列表散列在树结构上,则将使用相等进行比较。make-hash-table函数用于创建哈希表。此函数的语法是 -说明 --
key参数提供了关键。
-
:test参数确定键的比较方式 - 它应该具有三个值之一 #'eq、#'eql 或 #'equal,或者三个符号 eq、eql 或 equal 之一。如果未指定,则假定为 eql。
-
:size参数设置哈希表的初始大小。应该是一个大于零的整数。
-
:rehash-size参数指定哈希表变满时要增加多少大小。可以是大于零的整数,即要添加的条目数,也可以是大于 1 的浮点数,即新大小与旧大小的比率。此参数的默认值取决于实现。
-
:rehash-threshold参数指定哈希表在必须增长之前可以达到多满。可以是一个大于零且小于 :rehash-size 的整数(在种情况下,只要表增长,它就会被缩放),或者它可以是一个介于 0 和 1 之间的浮点数。个的默认值参数是依赖于实现的。
您还可以调用不带参数的 make-hash-table 函数。 -
-
从哈希表中检索项目并将项目添加到哈希表中
gethash函数通过搜索其键从哈希表中检索项目。如果找不到密钥,则返回 nil。它具有以下语法 -说明 --
key:是关联的键
-
hash-table: 是要搜索的哈希表
-
default:是要返回的值,如果没有找到该条目,如果没有指定则为 nil。
gethash函数实际上返回两个值,第二个是谓词值,如果找到条目则为真,如果没有找到条目则为假。要将项目添加到哈希表,您可以使用setf随着功能gethash功能。例子
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 - -
-
删除条目
remhash函数删除哈希表中特定键的任何条目。是一个谓词,如果有条目则为真,否则为假。个函数的语法是 -例子
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 - -
maphash 函数
maphashfunction 允许您对哈希表上的每个键值对应用指定的函数。它有两个参数——函数和哈希表,并为哈希表中的每个键/值对调用一次函数。例子
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 -