Meikel Brandmeyer wrote: > Maybe you can do: > > (reduce (fn [[sales upgrades demo :as v] data] > (cond > (is-sales? data) [(conj sales data) upgrades demo] > (is-upgrade? data) [sales (conj upgrades data) demo] > (is-demo? data) [sales upgrades (conj demo data)] > :else v)) > [[] [] []] (get-idata))
Another variation: (use 'clojure.contrib.seq-utils) (defn record-type [data] (cond (is-sale? data) :sales (is-upgrade? data) :upgrades (is-demo? data) :demos)) (group-by record-type (filter record-type (get-idata))) If the three output lists themselves are too large, I'd just explicitly sum your units with reduce: (reduce (fn [counts data] (let [type (record-type data)] (assoc counts type (+ (units data) (get counts type 0))))) {} (get-idata)) => {:sales 1233, :upgrades 17, :demos 42, nil 30} --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---