如何从clojure中的向量中的一系列映射中删除给定的键?

THX*_*137 1 lisp clojure clojurescript

在 clojure 中,给定一个数据结构,[{:a "foo" :b "bar"} {:a "biz" :b "baz"}]我将如何获得[{:b "bar"}{:b "baz"}]最简洁的信息?

Tay*_*ood 8

dissoc是用于将键与关联结构(如映射)分离的函数。以下是使用一张地图的方法:

(dissoc my-map :a)
Run Code Online (Sandbox Code Playgroud)

如果您有一系列地图,您可以map通过它们对dissoc每个地图中的键进行函数处理:

(map #(dissoc % :a) the-maps)
Run Code Online (Sandbox Code Playgroud)

这种措辞将匿名函数传递给map,但根据使用情况,您可能希望提取命名函数:

(defn fix-the-map [m]
  (dissoc m :a))

(map fix-the-map the-maps)
Run Code Online (Sandbox Code Playgroud)

  • 您可能还希望使用“mapv”而不是“map”,因为它总是为您提供 Clojure 向量而不是惰性序列的结果。 (3认同)
  • 我认为有些人太渴望获得矢量结果。我不喜欢没有充分理由就放弃懒惰。 (3认同)