我有一系列像这样的地图
({:a 1 :b 2 : c 4} {:a 3 :b 3 :d 4})
我想将其转换为一系列更紧凑的地图,它们只有:a和:b键,如下所示:
({:a 1 :b 2} {:a 3 :b 3})
最简洁的方法是什么?
答案 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}))