2016-07-08 11 views
0

Ich habe eine Liste von Karten mit Verzeichnisgrößen als Zeichenfolgen. Ich möchte es sortieren, in der Reihenfolge der Größe absteigend: das Problem ist, dass es enthält Einheiten als auch dh GB oder MBeine Liste von Karten nach Wert eines Schlüssels in absteigender Reihenfolge in Clojure sortieren

Die Liste sieht ungefähr so ​​aus:

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

heiß es so zu sortieren, dass sie ist in abnehmender Reihenfolge der Größen?

Antwort

0

Sie könnten tun:

(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

Ich kann der Vektor von Karten wie diese nicht schwer Code. Der Inhalt der Kartenliste wird dynamisch durch Code generiert. Ich muss es irgendwie neu ordnen, so dass es in abnehmender Reihenfolge der Größe ist, alle in GB zuerst und dann die in MB, alles sortiert – user3083633

+0

Ich habe die Reihenfolge korrigiert und eine 'sort-data' Funktion extrahiert, die Sie verwenden können . – kongeor

+0

Es hat funktioniert. Ich danke dir sehr :) – user3083633

Verwandte Themen