I've got a vector of 2-element vectors e.g. [[:a 1] [:b 2]] where the first val of any vec might appear in another vec e.g. [[:a 1] [:b 2] [:a 3]]. I need a fn that will consolidate this into a hash-map with the vals consolidated e.g.
(to-consolidated-map [[:a 1] [:b 2] [:a 3]]) ; {:a 4 :b 2} I've got two candidate implementations and I'm curious which you like better and why, or if I'm missing a better way: (defn to-consolidated-map [parts] (reduce (fn [h [k v]] (if (contains? h k) (assoc h k (+ (k h) v)) (assoc h k v))) {} parts)) (defn to-consolidated-map [parts] (->> parts (group-by first) (map (fn [[k v]] [k (->> v (map last) (reduce +))])))) TIA, David -- -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.