【发布时间】:2019-12-02 21:50:15
【问题描述】:
在 clojure 中,给定一个数据结构 [{:a "foo" :b "bar"} {:a "biz" :b "baz"}] 我如何最简洁地得到 [{:b "bar"}{:b "baz"}]?
【问题讨论】:
标签: clojure lisp clojurescript
在 clojure 中,给定一个数据结构 [{:a "foo" :b "bar"} {:a "biz" :b "baz"}] 我如何最简洁地得到 [{:b "bar"}{:b "baz"}]?
【问题讨论】:
标签: clojure lisp clojurescript
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)
【讨论】:
mapv 而不是map,因为它总是以 Clojure 向量而不是惰性序列形式为您提供结果。
(map #(...) xs) 我个人更喜欢写一个列表推导式。所以,(for [m the-maps] (dissoc m :a)).
@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)
【讨论】: