> Please have a look at the following function (explained in the doc > string). I have a bunch of rows that I need to aggregate using > different functions per field. I also need to apply the aggregate to a > subset of the rows. Obviously this is just like SQL aggregation, hence > the interface I've specified. > > However I'm left wondering whether my implementation could be improved. > > Particularly I very often find myself doing > > (apply hash-map (flatten (for [[k v] some-map] ...))) > > so often in fact that I feel like I'm missing something. > > Any pointers or advice on improving my style will be much appreciated!
Don't have a direct answer to your question, but what about implementing aggregate like this - (defn aggregate [rows & {select :select where :where}] (let [projection (apply merge-with vector (map #(select-keys % (keys select)) (filter where rows)))] (reduce (fn [agg [k v]] (assoc agg k (apply (select k) v))) {} projection))) Regards, BG -- Baishampayan Ghose b.ghose at gmail.com -- 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