Jua*_*nti 6 lisp hash dictionary data-structures
你可以在Lisp中使用哈希表或dicts吗?我的意思是数据结构是对(密钥,值)的集合,其中值可以使用键加入.
Rai*_*wig 11
Common Lisp至少有四种不同的方法(键值存储):
对于简单的用法,关联列表或属性列表都可以.随着元素数量的增加,它们往往变得"慢".哈希表"更快",但有自己的权衡.像许多其他对象系统一样使用CLOS对象.键是CLOS类中定义的插槽名称.虽然可以编程可以在访问时添加和删除插槽的变体.
如果您指的是Common Lisp,则哈希表由一个名为的类型提供hash-table.
使用这些表包括创建一个与功能make-hash-table,具有阅读价值gethash,通过将它们设置gethash为一个地方与演唱会setf,并与删除条目remhash.
从键值到哈希码的映射在具有该函数的哈希表之外可用sxhash.
当然 - Common Lisp有哈希表.
(setq a (make-hash-table))
(setf (gethash 'color a) 'brown)
(setf (gethash 'name a) 'fred)
(gethash 'color a) => brown
(gethash 'name a) => fred
(gethash 'pointy a) => nil
Run Code Online (Sandbox Code Playgroud)
属性列表适用于非常小的示范目的示例,但是对于任何实际需要,它们的性能都很糟糕,因此请使用哈希表.
Clojure有一个内置的地图类型:
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"
Run Code Online (Sandbox Code Playgroud)
见http://clojure.org/data_structures
在 Lisp 中,它通常被称为属性列表。