2016-12-14 6 views

答えて

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})) 
関連する問題