2011-08-25 73 views
12

如果我有一张地图,例如,返回序列

(def mymap { :b 1 :a 2 :d 3 :e 4 :f 5}) 

我可以使用瓦尔斯把所有的值的序列

(vals mymap) 
;=> (1 2 3 4 5) 

如何我得到的值的序列在我自己的自定义命令,以获取例如

;=> (4 2 3 1 5) 

我最终想要做的是序列化值为一个字符串,做这样的事情

(defn serialize [m sep] (apply str (concat (interpose sep (vals m)) ["\n"]))) 

(本例中的功能从“序列化的输入映射到被串”后服用)

,但我需要指定丘壑的顺序。

回答

23

地图是其按键的功能,让你可以这样做:

(map mymap [:e :a :d :b :f]) 
=> (4 2 3 1 5) 
+1

这是真棒! –

0

如果您想根据按键上的地图进行排序,然后得到的值, 布赖恩对如何做到这一点使用sort-by

一个例子或者你也可以实现自己的sort comparator

0

我不想排序(尽管感谢排序技巧),我只是想在从地图中拉出值时指定订单 。 我找到了一个办法 - 解构地图。

(let [{:keys [a b d e f]} mymap] 
    (println e a d b f))