I'm trying to sort a map by values (case insensitive). But it seems clojure sort function is case sensitive. See below example ,
cljs.user=> (sort {:1 "A" :2 "Z" :3 "i"})
([:1 "A"] [:2 "Z"] [:3 "i"])
cljs.user=> (reverse (sort {:1 "A" :2 "Z" :3 "i"}))
([:3 "i"] [:2 "Z"] [:1 "A"])
Can anyone please suggest me a solutions for this how can I sort in clojure by case-insensitive ?
Java provides a case insensitive string comparator:
(def m {:1 "A" :2 "Z" :3 "i"})
(sort-by val String/CASE_INSENSITIVE_ORDER m) ;; => ([:1 "A"] [:3 "i"] [:2 "Z"])
this one would probably work:
user> (sort-by (comp clojure.string/lower-case val) {:1 "A" :2 "Z" :3 "i"})
;;=> ([:1 "A"] [:3 "i"] [:2 "Z"])
or for :rank from op's answer:
user> (sort-by (comp clojure.string/lower-case :rank) [{:rank "A"} {:rank "Z"} {:rank "i"}])
;;=> ({:rank "A"} {:rank "i"} {:rank "Z"})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With