通过某些地图密钥合并两个列表



我想通过某个地图密钥合并两个列表,如下:

(def list1 '({:a 2 :b 2} {:a 1 :b 1}))
(def list2 '({:a 1 :c 1} {:a 2 :c 2}))

结果,我想要类似的东西,例如:a例如:

'({:a 1 :b 1 :c 1} {:a 2 :b 2 :c 2})

有什么想法?

您可以使用joinsort-by

(:require '[clojure.set :as s])
(sort-by :a (s/join list1 list2 {:a :a}))

这样做吗?

(def list1 '({:a 1 :b 1} {:a 2 :b 2}))
(def list2 '({:a 1 :c 1} {:a 2 :c 2}))
(println
  (map merge list1 list2)
)
;=> ({:a 1, :b 1, :c 1} {:a 2, :b 2, :c 2})

更新

(def list1 [ {:a 1 :b 1} {:a 2 :b 2} ] )
(def list2 [ {:a 2 :c 2} {:a 1 :c 1} ] )
(defn sort-merge [lista listb]
  (map merge (sort-by :a lista) (sort-by :a listb)))
(println
  (sort-merge list1 list2))
;=> ({:a 1, :b 1, :c 1} {:a 2, :b 2, :c 2})

另一种方法是使用列表理解:

user> (for [x list1
            y list2
            :when (= (:a x) (:a y))]
        (merge x y))
({:a 2, :b 2, :c 2} {:a 1, :b 1, :c 1})

最新更新