如果我这样做,我可以使用什么功能:
(the-function :a [1 2 3 4 5])
我得到:
[{:a 1} {:a 2} {:a 3} {:a 4} {:a 5}]
感谢您的回答!
如果我这样做,我可以使用什么功能:
(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 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 代替地图:
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}]
您可以通过简单地使用地图来做到这一点:
(map (fn [v] {:a v}) [1 2 3 4 5]) ;; ({:a 1} {:a 2} {:a 3} {:a 4} {:a 5})
这是你要找的吗?
然后,您当然可以将此逻辑包装在一个函数中 - 只要您经常使用它。