【问题标题】:What libraries provide persistent data structures?哪些库提供持久数据结构?
【发布时间】:2013-12-30 06:51:32
【问题描述】:

我已经沉迷于 Clojure 的核心数据结构。在使用其他语言工作时,我尽量忠实于它们各自的习语,但偶尔,一些持久性数据结构正是解决问题的正确方法。

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

【问题讨论】:

    标签: data-structures clojure libraries immutability


    【解决方案1】:

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

    我希望看到更像 Clojure 的无序容器的 32 元变体。

    【讨论】:

    • 我没有意识到 clojure-py 暴露了它的数据结构,太棒了!不过,我为 Mori 所做的相同评论也适用于这里:看到一个仅为数据结构打包的库会很酷。这样的库更有可能被非 Clojure 的人使用。
    • @BrandonBloom 我们可能会在工作中生成该库。时间会证明一切。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 我仍在寻找 Python 和 Go 库。拥有一个“原生”JS 库也不错,而不是重新打包 ClojureScript 的核心。也欢迎其他语言库。
      【解决方案4】:

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

      它包含持久向量、映射、集合、记录、包、列表、出队以及向量、映射和集合的类型和不变检查版本的实现。

      还有一堆方便的函数可以转换成内置的对应物。

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

      【讨论】:

      • 很高兴听到您为它创建了一个库。您能否在您的答案中添加一些解释,说明为什么它是一个不错的选择以及它可以做什么?
      【解决方案5】:

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

      还有另一个 python 库 pyrsistent 看起来更易于维护和性能。

      【讨论】:

        【解决方案6】:

        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。

        有一个类似于 Clojure 的 Vector 的 RRB-Tree in the works(基于另一篇 Phil Bagwell 论文),但支持随时插入。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-17
          • 1970-01-01
          • 2012-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-21
          相关资源
          最近更新 更多