2016-11-12 2 views
3

Ich habe eine Karte von Vektoren, wie folgt aus:Sortierung Vektoren in Clojure Karte von Vektoren

{2 ["a" "c" "b"], 1 ["z" "y" "x"]} 

Ich möchte eine Karte erhalten, die durch Schlüssel sortiert, und dann jeweils entsprechende Vektor ist auch sortiert, wie diese :

{1 ["x" "y" "z"], 2 ["a" "b" "c"]} 

ich weiß, dass ich mit den Tasten, indem Sie (into (sorted-map) themap) sortieren kann, und ich weiß, dass ich einen Wandler zu into liefern kann, aber ich bin kurz wie genau kommen, wie der Wandler aussehen soll. Hier ist ein Wandler Ich habe versucht:

(defn xform [entry] 
    (vector (first entry) (vec (sort (second entry))))) 

Allerdings, wenn ich versuche, es zu meiner Karte zu beantragen, bekomme ich diese Ausnahme:

java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.core$conj__4345 

Wie kann ich dies funktioniert? Gibt es einen besseren Weg als mit into mit einem Wandler?

+0

Sie es fast bekam. Sie haben gerade versäumt, die 'map' -Funktion zu verwenden, um einen' map' Wandler zu erstellen. '(map xform)', obwohl man diese Funktion nicht als xform bezeichnen sollte, da es noch kein Wandler ist, sondern nur eine Funktion. – ClojureMostly

Antwort

4

So:

(into (sorted-map) 
     (map (fn [[k v]] [k (vec (sort v))])) 
     {2 ["a" "c" "b"], 1 ["z" "y" "x"]}) 
+0

Vielen Dank. Ich lerne immer noch Clojure. :) –