2016-11-12 87 views
3

我有地图的载体,就像这样:排序向量

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

我想由关键字排序的映射,然后每个对应的向量也被排序,这样:

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

我知道我可以通过按键做(into (sorted-map) themap)排序,我知道我可以提供一个换能器into,但我的短来了,究竟如何换能器应该看看。这里有一个传感器我已经试过:

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

然而,当我尝试将其应用到我的地图,我得到这个异常:

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

我怎样才能得到这个工作?有没有更好的方法,然后使用into与换能器?

+0

你几乎得到了它。您错过了使用“地图”功能来创建“地图”传感器。 '(map xform)',尽管你不应该把这个函数叫做xform,因为它不是一个传感器,而只是一个函数。 – ClojureMostly

回答

4

像这样:

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

非常感谢。我仍然在学习Clojure。 :) –