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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---