Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clojure sort String values - case insensitive

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 ?

like image 304
Navneet Singh Avatar asked Mar 23 '26 20:03

Navneet Singh


2 Answers

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"])
like image 139
Steffan Westcott Avatar answered Mar 26 '26 12:03

Steffan Westcott


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"})
like image 33
leetwinski Avatar answered Mar 26 '26 13:03

leetwinski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!