Thanks Baishampayan, Meikel, pepijn, and Jonathan.
The use of partition-by function does solve this very elegantly. Below is the list of solutions I have received: (defn merge-data [data1 data2] (map first (partition-by :id (sort-by :id (concat data2 data1))))) (defn merge-data2 [data1 data2] (let [override-ids (set (map :id data2))] (concat data2 (remove (comp override-ids :id) data1)))) (defn merge-override [merge-key data2 data1] (let [keyset (into #{} (map #(% merge-key) data2))] (apply merge data2 (remove #(keyset (% merge-key)) data1)))) ________________________________ From: clojure@googlegroups.com [mailto:clojure@googlegroups.com] On Behalf Of Jonathan Fischer Friberg Sent: Tuesday, April 26, 2011 12:58 PM To: clojure@googlegroups.com Subject: Re: Merging two maps based on ids Correction: (concat data1 data2) should be (concat data2 data1) On Tue, Apr 26, 2011 at 6:37 PM, Jonathan Fischer Friberg <odysso...@gmail.com> wrote: (defn merge-data [data1 data2] (map first (partition-by :id (sort-by :id (concat data1 data2))))) Since the sorting is stable (relative order is kept), we know that the first occurrence of each id is either the existing map from data1, or the new map from data2. On Tue, Apr 26, 2011 at 5:34 PM, pepijn (aka fliebel) <pepijnde...@gmail.com> wrote: Another option is using clojure.set, as is shown here: https://github.com/pepijndevos/Begame/blob/master/src/begame/util.clj#L9 9 On Apr 26, 10:10 am, Meikel Brandmeyer <m...@kotka.de> wrote: > Hi, > > you can construct the output sequence from your input sequences. > > (defn merge-data > [data-orig data-override] > (let [override-ids (set (map :id data-override))] > (concat data-override (remove (comp override-ids :id) data-orig)))) > > If you need your output sorted you can also add a "(sord-by :id ...)" around > the concat. > > Sincerely > Meikel -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com <mailto:clojure%2bunsubscr...@googlegroups.com> For more options, visit this group at http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en