2016-07-21 18 views
2

Ich habe eine Funktion, die eine Liste der Karten ausgibt, die wie folgt aussehen:reodering Schlüssel in Karten in einer Liste von Karten

({:size20160721 "19.94 GB", :size20160720 "19.94 GB", :size20160719 "100 GB", :directory_path "/user/1 "} 
{:size20160721 "1 GB", :size20160720 "4 GB", :size20160719 "10 GB", :directory_path "/user/2 "} 
... 
) 

wie kann ich diese Liste der Karten neu anordnen, so dass jede Karte hat: directory_path Zuerst, gefolgt von: Größenschlüsseln, deren Anzahl variabel sein kann, aber für alle Wege gleich ist?

Antwort

2

Verwendung sorted-map-by, mit Komparator, die :directory_path auf dem ersten Platz immer gesetzt würde:

user> 
(def data '({:size20160721 "19.94 GB", :size20160720 "19.94 GB", 
      :size20160719 "100 GB", :directory_path "/user/1 "} 
      {:size20160721 "1 GB", :size20160720 "4 GB", 
      :size20160719 "10 GB", :directory_path "/user/2 "})) 
;; #'user/data 

user> 
(def dirfirst (sorted-map-by #(cond (= :directory_path %1) -1 
            (= :directory_path %2) 1 
            :else (compare %1 %2)))) 
;; #'user/dirfirst 

user> (map (partial into dirfirst) data) 

;; ({:directory_path "/user/1 ", :size20160719 "100 GB", 
;; :size20160720 "19.94 GB", :size20160721 "19.94 GB"} 
;; {:directory_path "/user/2 ", :size20160719 "10 GB", 
;; :size20160720 "4 GB", :size20160721 "1 GB"}) 
+0

dies einfach ist das Löschen: DIRECTORY_PATH Schlüssel aus den Karten. Oder mache ich einen Fehler? – user3083633

+0

Können Sie Ihren Versuch veröffentlichen? Könnten Sie auch mein Beispiel in repl ausführen. Würde es immer noch scheitern? – leetwinski

+0

Es funktioniert. Vielen Dank! – user3083633

Verwandte Themen