2016-12-14 50 views
0

合并两个列表,我想通过一些图例如下合并两个列表:一些地图键

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

至于结果,我想是这样,使用排序:一,例如:

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

任何想法?

回答

1

这样做吗?

(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}) 

UPDATE

(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}) 
+0

这些地图中列出了可能不为了。我刚刚做了一个编辑。 – guijob

1

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

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}) 
3

您可以使用joinsort-by

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