哪些库提供持久数据结构?

时间:2013-12-30 06:51:32

标签: data-structures clojure libraries immutability

我已经沉迷于Clojure的核心数据结构。在使用其他语言时,我尽量坚持各自的习语,但偶尔会有一些持久的数据结构正确解决问题。

特别是,我正在寻找Phil Bagwell的向量和数组映射尝试(即哈希映射)的实现。相关库应包括奖励积分的集合,队列和有序集/地图变体。

6 个答案:

答案 0 :(得分:7)

Haskell在各种库中有很多持久性集合,足以在这里列出它们是不合适的,所以我只提到了与Clojure的HAMT最接近的等价物。

我希望在无序容器上看到32-ary变体,但更像是Clojure。

答案 1 :(得分:1)

答案 2 :(得分:1)

这是我自己的图书馆的一部分,但我想我必须提及它,因为它是恕我直言唯一且非常有用的:PersistentTreeGrid。它提供:

  • 真正的持久数据结构
  • 索引的3D空间
  • 中存储数据
  • 稀疏存储 - 相同值的块会合并,因此您可以拥有具有相同值的大区域,同时显着降低存储需求。
  • 细分是通过 4x4x4 网格的64路树实现的
  • 用于扫描和修改空间区域的各种快速迭代策略

它足够快,可以用作游戏的后备存储(例如,可变形3D地形的稀疏存储)。

它是用Java编写的,但我已经成功地使用了其他JVM语言。

答案 3 :(得分:1)

对于Python,有fn.py实现持久数据结构以及添加一些其他功能特性。

还有另一个python库pyrsistent,它看起来更加维护和高效。

答案 4 :(得分:1)

对于Python,有一个名为pyrsistent的库(我是作者)。它只关注持久性/功能性数据结构。

它包含持久性向量,地图,集合,记录,包,列表,出列以及向量,地图和集的类型和不变检查版本的实现。

还有许多便利功能可以转换为内置对应的功能。

有关更多信息和示例,请参阅github page

答案 5 :(得分:0)

Paguro提供了Clojure不可变集合的类型安全版本以及一些其他工具,使Java 8中的函数编程更容易一些。这Vector is faster than the one in PCollections。整个项目适合在compact1配置文件中编译的200K jar文件。 All collections are painstakingly fit into the standard Java Collections API。包括Clojure的五个集合实现:Vector,HashSet,HashMap,SortedSet和SortedMap。

有一个RRB-Tree in the works(基于另一个Phil Bagwell论文),像Clojure的Vector,但在任何时候都支持插入。