在Alex Taggart的评论之后编辑。
我使用拉链轻松遍历和编辑可以增长到数千个节点的树。首次创建时,每个节点都是不完整的。数据将随机添加/删除,叶子节点将被分支等替换。
树可能非常不平衡。 对节点的快速随机访问也很重要。
实现是使用zipper遍历树并创建由key索引的节点的哈希表。毋庸置疑,上述内容效率非常低:
简而言之,是否有时间/空间有效的方法将遍历/更新的容易性与拉链相结合以及快速访问clojure中的哈希表?
答案 0 :(得分:2)
Clojure的数据结构是持久的,并使用结构共享。这意味着添加,删除或累积等操作并不像您描述的那样低效。由于您没有重复已经存在的内容,因此内存成本将很低。
默认情况下,Clojure的数据结构是不可变的。树状结构中的节点因此不会自行更新,除非您使用某种引用类型(如Var)。我不太了解您的具体用例,以获取有关访问节点的最佳方法的建议。访问嵌套结构中节点的一种方法是get-in function,您可以在其中提供节点返回其值的路径。
希望这有助于解决您的问题。