从地图中获取两个不同的关键字

时间:2017-07-17 20:29:22

标签: clojure

我刚开始学习Clojure,我想从地图矢量中获取两个关键字。

假设有一个向量

(def a [{:id 1, :description "bla", :amount 12, :type "A", :other "x"} {:id 2, :description "blabla", :amount 10, :type "B", :other "y"}])

我想要一个新的载体

[{"bla" 12} {"blabla" 10}]

我该怎么做? 谢谢!

3 个答案:

答案 0 :(得分:6)

假设您希望单独:description:amount,而不是将地图映射到另一个的地图,您可以使用juxt同时检索两者:

(mapv (juxt :description :amount) a)
;; => [["bla" 12] ["blabla" 10]]

如果您确实打算制作地图,可以使用例如applyhash-map来执行此操作:

(mapv #(apply hash-map ((juxt :description :amount) %)) a)
;; => [{"bla" 12} {"blabla" 10}]

答案 1 :(得分:3)

您可以使用mapv映射源矢量。在转换函数中,您可以构造每个映射以提取所需的键并构造结果:

(mapv (fn [{:keys [description amount]}] {description amount}) a)

答案 2 :(得分:3)

(mapv #(hash-map (:description %) (:amount %)) a)