如何使用选定的键将一系列地图转换为一系列地图?

时间:2011-02-25 13:25:27

标签: clojure

我有一系列像这样的地图

({:a 1 :b 2 : c 4} {:a 3 :b 3 :d 4})

我想将其转换为一系列更紧凑的地图,它们只有:a和:b键,如下所示:

({:a 1 :b 2} {:a 3 :b 3})

最简洁的方法是什么?

2 个答案:

答案 0 :(得分:9)

您正在寻找内置函数select-keys

(let [in [{:a 1 :b 2 :c 4} {:a 3 :b 3 :d 4}]]
  (map #(select-keys % [:a :b])
       in))

答案 1 :(得分:0)

更通用的解决方案是编写一个函数,该函数获取您想要保留的键并在映射上返回fn。然后将其映射到地图序列上:

(defn keep-keys
  [ks]
  (fn [m] (select-keys m ks)))

(map (keep-keys [:a :b]) '({:a 1 :b 2 :c 4} {:a 3 :b 3 :d 4}))