I have a list of maps having directory sizes as strings. I want to sort it in descending order of size: the problem is that it contains units as welL ie GB or MB
The list looks something like this:
({:directory_path /user/dod/1, :directory_size 8.49 MB} {:directory_path /user/dod/22, :directory_size 1.66 GB} {:directory_path /user/dod/testorc, :directory_size 1.28 MB} )
hot to sort it such that it is in decreasing order of sizes?
You could do:
(defn str->float [s]
(Float. s))
(defn filesize->num [fs]
(let [[size unit] (clojure.string/split fs #" ")
size (str->float size)]
(condp = unit
"MB" size
"GB" (* size 1000))))
(def ->ds #(-> % :directory_size filesize->num))
(defn sort-data [data]
(sort-by ->ds #(compare %2 %1) data))
(def data [{:directory_path "/user/dod/2", :directory_size "8.49 MB"}
{:directory_path "/user/dod/22", :directory_size "1.66 GB"}
{:directory_path "/user/dod/testorc", :directory_size "1.28 MB"}])
(sort-data data)