On Fri, Jul 10, 2009 at 3:04 PM, Benjamin Stewart<[email protected]> wrote
[...]
> (defn count-hash-vals [coll]
> ;; apply hash-map mapcat was the first thing
> ;; I found that worked here... better options ++welcome.
> (apply hash-map
> (mapcat #(let [[k v] %]
> (list k (count v)))
> coll)))
>
> (defn orderByFreq [coll]
> (or
> (keys (sort cmpr
> (count-hash-vals (group-by identity coll)) ))) ;; as an
> exercise for the reader, use this call to implement (majority? ...) or
> (plurality? ...) etc.
> '()) ;; I don't think this OR short circuiting is idiomatic in
> clojure, but it sure is handy for "empty list if nil" scenarios.
> ;; Of course, (empty-list-or-nil ...) reads nice enough...
Here is a version without the apply/hash-map/mapcat that uses a plain
map instead. The function no longer returns a map, so the (keys map)
call has to be replaced as well:
(defn count-hash-vals [coll]
(map (fn [[k v]] [k (count v)]) coll))
(defn -orderByFreq [_ coll]
(or
(map first (sort cmpr
(count-hash-vals (group-by identity coll))))
'()))
/Patrik
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---