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

how to remove a given key from a series of maps in a vector in clojure?

在 clojure 中,给定一个数据结构 [{:a "foo" :b "bar"} {:a "biz" :b "baz"}] 我怎样才能最简洁地得到 [{:b "bar"}{:b "baz"}]

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

(dissoc my-map :a)

如果您有一系列地图,您可以 map 对它们使用函数 dissoc 来自每个地图的键:

(map #(dissoc % :a) the-maps)

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

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

(map fix-the-map the-maps)

@Taylor 在每张地图上对 dissoc :a 的以上回答很好,如果你想要所有没有 :a 的地图。

如果你想要一个只有 :b 键的地图列表,你可以做

<!-- language-all: lang-clj -->

;; Assuming my-map is the object map
;; map returns a lazy sequence

(map #(hash-map :b (:b %)) my-map)

;; or
(map #(select-keys % [:b]) mp)