如何在clojure中将一个键分配给一个向量的每个项目?

时间:2013-05-08 01:28:31

标签: clojure

如果我这样做,我可以使用什么功能:

(the-function :a [1 2 3 4 5])

我得到: [{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}]

感谢您的回答!

2 个答案:

答案 0 :(得分:6)

有几种表达方式:

user> (defn the-function [key vals] (map hash-map (repeat key) vals)) 
#'user/the-function    
user> (the-function :a [1 2 3 4 5])      
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})  

user> (defn the-function [key vals] (map (partial hash-map key)  vals))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

或使用for而不是map:

user> (defn the-function [key vals] (for [val vals] {key val}))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

这些返回序列,如果它需要是一个向量,你可以将它们包装在vec的调用中或使用mapv:

user> (defn the-function [key vals] (mapv (partial hash-map key)  vals))
#'user/the-function
user> (the-function :a [1 2 3 4 5])
[{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}]
user> (the-function :a `(1 2 3 4 5))
[{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}] 

答案 1 :(得分:3)

您只需使用map:

即可
(map (fn [v] {:a v}) [1 2 3 4 5]) ;; ({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})

这是你要找的吗?

然后你可以将这个逻辑包装在一个函数中 - 只要你经常使用它。