以特定顺序返回clojure映射值的序列

Rob*_*ler 12 clojure

如果我有地图,例如,

(def mymap { :b 1 :a 2 :d 3 :e 4 :f 5})
Run Code Online (Sandbox Code Playgroud)

我可以使用val来获取所有值的序列

(vals mymap)
;=> (1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)

如何获取我自己的自定义顺序中的值序列,以获取示例

;=> (4 2 3 1 5)
Run Code Online (Sandbox Code Playgroud)

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

(defn serialize [m sep] (apply str (concat (interpose sep (vals m)) ["\n"])))
Run Code Online (Sandbox Code Playgroud)

(此示例函数取自"将输入映射序列化为字符串"帖子)

但我需要指定vals的顺序.

Jus*_*mer 25

地图是其键的功能,因此您可以这样做:

(map mymap [:e :a :d :b :f])
=> (4 2 3 1 5)
Run Code Online (Sandbox Code Playgroud)