マップのリストがあり、マップ内のキーの 1 つが繰り返されるキーです。リストを重複除去/マージしたい。たとえば、次のようになります。
(def data [{:id 1 :a 2 :b 3 :c 4} {:id 1 :c 5 :d 6} {:id 2 :a 100 :b 101 :c 102} {:id 2 :a 103 :d 104} {:id 2 :a 200 :f 201}])
そして、私は次のようになりたいです:
[{:id 1 :a 2 :b 3 :c 5 :d 6} {:id 2 :a 200 :b 101 :c 102 :d 104 :f 201}]
(マージ/マージウィズが機能するように質問を表現しましたが、実際には、重複する値で何が起こるかはあまり気にしません。最初のインまたは最後のインが勝つ可能性があります)。
私が持っているものは次のとおりです。
(vals (apply merge-with merge (into #(hash-map (:id %) %) data)))
これは機能しますが、これを行うためのより良い、より簡潔な、またはエレガントな方法があるかどうか疑問に思っています。into
また、シーケンスの完全なコピーを実行し、全体をメモリに強制していると思うので、パフォーマンスについても疑問に思います (元のデータは遅延シーケンスでした)。