gpt4 book ai didi

clojure - 为什么 Clojure 中的向量没有实现 dissoc?

转载 作者:行者123 更新时间:2023-12-03 00:24:45 26 4
gpt4 key购买 nike

我知道 clojure 的 clojure.lang.IPercientVector 实现了 assoc,如 (assoc [0 1 2 3] 0 -1) ; => [-1 1 2 3] 。我还听说(如 this 答案),clojure 的向量没有实现 dissoc,如 (dissoc [0 1 2 3] 0) ; => [1 2 3] 。如果使用 subvec 可以轻松重现此功能,那么是否有任何真正的原因不应该在 clojure.langclojure.core 中实现它>,甚至贡献?如果不是,这背后有什么理由吗?

最佳答案

Dissoc 对于向量来说没有多大意义,原因有两个:

  1. dissoc的意思是“删除 key ”。您无法在不引起其他副作用(例如移动所有 future 值)的情况下从向量中删除键
  2. 如果
  3. dissoc 必须移动所有后续键,那么它在向量上的表现会相对较差 - 大约是 O(n) 且需要大量 GC。 Clojure 核心通常会避免实现效率低下/对于特定数据结构没有意义的操作。

基本上,如果您发现自己想要对向量进行 dissoc,那么您可能使用了错误的数据结构。持久的 HashMap 或集合可能是更好的选择。

如果您想要一个作为向量工作但支持有效剪切和插入元素或子序列的数据结构,那么值得检查 RRB 树:https://github.com/clojure/core.rrb-vector

关于clojure - 为什么 Clojure 中的向量没有实现 dissoc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com