2016-12-14 17 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}))