合併兩個列表,我想通過一些圖例如下合併兩個列表:一些地圖鍵
(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})
任何想法?
合併兩個列表,我想通過一些圖例如下合併兩個列表:一些地圖鍵
(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})
任何想法?
這樣做嗎?
(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})
另一種方法是使用列表理解:
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})
您可以使用join
和sort-by
:
(:require '[clojure.set :as s])
(sort-by :a (s/join list1 list2 {:a :a}))
這些地圖中列出了可能不爲了。我剛剛做了一個編輯。 – guijob