Skip to content

Instantly share code, notes, and snippets.

@gigasquid
Created June 16, 2011 01:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gigasquid/1028525 to your computer and use it in GitHub Desktop.
Save gigasquid/1028525 to your computer and use it in GitHub Desktop.
Sort Users 4Clojure
(defn users-comp [x y]
(let [xsolved (count (:solved x))
ysolved (count (:solved y))
xlastlogin (:last-login x)
ylastlogin (:last-login y)]
(cond (> xsolved ysolved) 1
(< xsolved ysolved) -1
(and xlastlogin (nil? ylastlogin)) 1
(and ylastlogin (nil? xlastlogin)) -1
(and xlastlogin ylastlogin (.after xlastlogin ylastlogin)) 1
(and xlastlogin ylastlogin (.after ylastlogin xlastlogin)) -1
:else 0)))
(defn users-sort [users]
(reverse (sort users-comp users)))
(def test-users-by-solved
[{:user "user1" :solved [1] } {:user "user2" :solved [1 2 3 4]}
{:user "user3" :solved [2 2] } {:user "user4" :solved [3]}])
(users-sort test-users-by-solved)
(def date1 (java.util.Date.))
(def date2 (java.util.Date.))
(def test-users-by-date
[{:user "user1" :last-login date1 } {:user "user2" :last-login date2}
{:user "user3" } {:user "user4" :last-login date2}])
(users-sort test-users-by-date)
(def test-users-by-solved-and-date
[{:user "carin" :solved [1 2]} {:user "sue" :solved [1 2] :last-login date1}
{:user "beth" :solved [1 2] :last-login date2}])
(users-sort test-users-by-solved-and-date)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment