キーいくつかのマップで二つのリストをマージ:私は並べ替え使用して、のようなものが欲しい結果は、私は以下のようにいくつかのマップキーにより二つのリストをマージしたい
(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