ANSI Common Lisp 笔记五(哈希表)

摘自 《ANSI Common Lisp》


一、

make-hash-table 来构造一个哈希表,它不需要传入参数:

CL-USER> (setf ht (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x2100B83D2D>


一个哈希表,像是一个关联列表,是一种表达相关对象的方式。要取出与一给定键值有关的数值,我们调用 gethash 并传入一个键值与哈希表。预设情况下,如果没有与这个键值相关的数值,gethash 会返回 nil 。

CL-USER> (gethash 'color ht)
NIL
NIL

在这里我们首次看到 Common   Lisp最突出的特色之一:一个表达式可以返回多个数值。


把数值与键值做关联,我们使用gethash 搭配 setf :

CL-USER> (setf (gethash 'color ht) 'red)
RED

CL-USER> (gethash 'color ht)
RED
T


要从集合中移除一个对象,你可以调用 remhash,它从一个哈希表中移除一个词条:
CL-USER> (remhash 'color ht)
T


哈希表有一个迭代函数:maphash ,它接受一个两个参数的函数及一个哈希表。函数会被每个键值对调用,没有特定的顺序:

>(setf (gethash   'shapeht)     'spherical
           (gethash      'sizeht)      'giant)
GIANT
>(maphash   #' (lambda     (k    v)
                            (formatt "~A=~A~%" k v))
                              ht)
SHAPE=SPHERICAL
SIZE=GIANT
COLOR=RED
NIL


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值