2016-11-12 142 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。 :) –