本文主要是介绍newLISP中的字典类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在之前一篇在newlisp中使用table-driven模式曾经用过这个类型做table-driver模式。
这里将专门描述Tree如何使用。
创建字典
首先Tree是一个namesapce(也就是context),如果想创建一个字典保存key/value结构,需要如下使用:
(new Tree 'MyTable)
(MyTable "/home/a.cc" "123:45")
(MyTable "/home/b.cc" "123:46")
(MyTable "/home/c.cc" "123:47")
(MyTable "/home/d.cc" "123:48")
(MyTable "/home/e.cc" "123:49")
这样,其实是创建了一个名为MyTable的context,里面用symbol的形式保存了很多key/value的组合。
查询字典
读取的时候也很简单:
(MyTable "/home/a.cc")
"123:45"
添加数据和遍历
(while (read-line)(set 'line-value (parse (current-line) "\t"))(set 'key (line-value 0))(set 'value (int (line-value 1)))(set 'v (my-table key))(if v(my-table key (+ v value))(my-table key value))
)(dolist (item (my-table)) (println (item 0) "\t" (item 1)))(exit)
这段代码演示了如何读取一行数据,分解出key和value,然后用key查找,如果有则累加value,如果没有则添加数据
最后,遍历所有的数据。
字典长度
(length (MyTable))
保存字典
(save "d2.lsp" 'MyTable)
这样MyTable里的所有数据都被保存到d2.lsp文件中,现在打开看一下:
(context 'MyTable)(set '_/home/a.cc "123:45")(set '_/home/b.cc "123:46")(set '_/home/c.cc "123:47")(set '_/home/d.cc "123:48")(set '_/home/e.cc "123:49")(context MAIN)
原来居然是很多的MyTable 中的变量,所以这其实是一个模拟的字典。目前我还不清楚其算法复杂度是多少?
读取字典文件
就是通用做法
(load "d2.lsp")
MAIN
现在可以使用了。
这篇关于newLISP中的字典类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!