合并两个列表,我想通过一些图例如下合并两个列表:一些地图键
(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