2016-07-08 2 views
0

디렉토리 크기가 문자열 인 맵 목록이 있습니다. 나는 크기의 내림차순으로 정렬 할 :클로저에서 내림차순으로 키 값순으로 맵 목록 정렬

뜨거운
({: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}) 

이는 그것을 것을 정렬 : 문제가

목록은 다음과 같이 보입니다 잘 즉, GB 또는 MB와 같은 단위를 포함입니다 크기가 감소하는 순서입니까?

답변

0

당신은 할 수 :

(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) 
+0

내가 할 수없는 하드 코드 같은지도의 벡터. 지도 목록의 내용은 코드를 통해 동적으로 생성됩니다. 어떻게 든 순서를 바꾸어서 순서를 바꿔야합니다. 우선 GB 단위의 모든 것들과 MB 단위의 것들이 정렬됩니다. – user3083633

+0

나는 순서를 정정하고 사용할 수있는'sort-data' 함수를 추출했습니다. . – kongeor

+0

그것은 효과가있다. 정말 고맙습니다 :) – user3083633