Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure手指树和flexvec_Clojure_Finger Tree - Fatal编程技术网

Clojure手指树和flexvec

Clojure手指树和flexvec,clojure,finger-tree,Clojure,Finger Tree,我正在寻找一种持久的顺序数据结构,它允许有效的随机插入和删除。我发现了以下实现: (计数双列表实现) 由于clojure.data.finger-tree在过去两年中没有太多的活动,其他的都是相对较新的,我想知道是否有人有在生产中使用其中任何一种的经验,以及是否有我忽略的替代方案。另一个实现是。因为它在clojure github帐户中,所以看起来它将成为事实上的实现。为什么clojure的PersistentVector不够好?您可以添加有关您的用例的详细信息吗?@ordnungswi

我正在寻找一种持久的顺序数据结构,它允许有效的随机插入和删除。我发现了以下实现:

  • (计数双列表实现)

由于clojure.data.finger-tree在过去两年中没有太多的活动,其他的都是相对较新的,我想知道是否有人有在生产中使用其中任何一种的经验,以及是否有我忽略的替代方案。

另一个实现是。因为它在clojure github帐户中,所以看起来它将成为事实上的实现。

为什么clojure的PersistentVector不够好?您可以添加有关您的用例的详细信息吗?@ordnungswidrig,响应您对我的用例的请求:我有一个表示为数组的文档。作为对事件的响应,文档将在文档中的特定偏移处进行插入和删除更新。通常,在一个相对较大的文档中只有一个或两个插入或删除。使用clojure的持久化向量实现,我必须在每个事件上重新创建文档。例如,使用手指树,我可以沿着修改后的偏移量拆分和连接文档。由于结构共享,这应该不会带来很大的成本。或者您是否需要访问分割的部分,例如用于优化磁盘持久性?@ordnungswidrig如果您重新创建表示文档的向量,则该向量将不会在结构上共享。问题是,您无法在具有恒定时间操作的向量中插入或删除元素。clojure/core.rrb-vector只是Michal的flexvec迁移为contrib库。