gpt4 book ai didi

clojure - 如何从 Clojure 中的序列中删除项目?

转载 作者:行者123 更新时间:2023-12-02 09:38:56 25 4
gpt4 key购买 nike

首先,我假设每个特定于结构的序列都有不同的删除项目的方法:向量可以按索引,List 可以首先或最后删除,Set 应该传递要删除的实际项目,等等。

其次,我假设有一些与结构无关的移除方法;他们在 seq 接口(interface)上工作。

由于序列在 Clojure 中是不可变的,我怀疑您实际上在做的是制作原始的廉价副本,只是没有原始项目。这意味着列表理解可以用于删除,但我怀疑它会不必要地冗长。

请给出一些从 Clojure 序列中删除项目的不同方法的惯用示例。

最佳答案

没有一个接口(interface)可以从 Clojure 的所有数据结构类型中删除内容,这可能是因为不同的性能特征。

(disj #{:foo :bar} :foo)       ; => #{:bar}
(dissoc {:foo 1 :bar 2} :foo) ; => {:bar 2}
(pop [:bar :foo]) ; => [:bar]
(pop (list :foo :bar)) ; => (:bar)

这些也有效(返回 seq ):
(remove #{:foo} #{:foo :bar})      ; => (:bar)
(remove #{:foo} [:foo :bar]) ; => (:bar)
(remove #{:foo} (list :foo :bar)) ; => (:bar)

这不适用于哈希映射,因为当您遍历映射时,您会得到键/值对。但这有效:
(remove (fn [[k v]] (#{:foo} k)) {:foo 1 :bar 2})  ; => ([:bar 2])

关于clojure - 如何从 Clojure 中的序列中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939278/

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