Collections 从Clojure中的集合中删除条目
我是Clojure的新手,我想知道如何从集合中删除元素 假设我有:Collections 从Clojure中的集合中删除条目,collections,syntax,clojure,Collections,Syntax,Clojure,我是Clojure的新手,我想知道如何从集合中删除元素 假设我有: (def example ["a" "b" "c"]) 我想在我打电话的时候说“b”就可以了 (println example) 并让它返回一个只有“a”和“c”的集合 我知道使用(删除(partial=“b”)示例) 将返回我想要的内容,但如何使用此更新示例变量 谢谢 (filter (fn [x] (not (= x "b"))) example) 将为您提供”(“a”“c”)。几点: 你不应该考虑基因突变。总体上使用
(def example ["a" "b" "c"])
我想在我打电话的时候说“b”就可以了
(println example)
并让它返回一个只有“a”和“c”的集合
我知道使用(删除(partial=“b”)示例)
将返回我想要的内容,但如何使用此更新示例变量
谢谢
(filter (fn [x] (not (= x "b"))) example)
将为您提供”(“a”“c”)
。几点:
首先,首先检查你是否真的需要突变。Clojure是围绕处理不可变数据而设计的—您最终想要做的事情有可能在不改变现有值的情况下实现 如果您需要可变数据,您可以为此创建一个atom—更改汽车的价值通常是一种不好的做法
(def example (atom ["a" "b" "c"]))
(println @example) ;; ["a" "b" "c"]
(swap! example #(remove (partial = "b") %))
(println @example) ;; ["a" "c"]
Clojure的默认数据结构是不可变的。因此,不能在位更改向量,但可以使用所需元素创建一个新向量 在函数上下文中,以下是如何使用remove:
(defn my-func [col]
(let [without-b (remove #(= "b" %) col)]
(println without-b)
; do something else w/ without-b
))
...
=> (my-func ["a" "b" "c"])
(a c)
这是Clojure处理集合的惯用方法,即从旧集合创建新集合。这不会对内存或性能产生“重大”影响,因为数据结构是在基于树的数据结构上实现的,因此,您可以在此处了解更多信息:
使用
filter
insteadAFAIK Clojure的风格是使用不可变的数据结构。因此,示例
应该永远保持原样。您应该创建新的集合,例如使用已经指出的筛选器。