Collections Clojure:在集合中封装每个元素的惯用方法

Collections Clojure:在集合中封装每个元素的惯用方法,collections,clojure,Collections,Clojure,如果我有一个特定形状的集合: ["Alpha", "Beta", "Gamma"] ;; vector of strings 我想通过包装每个元素来转换它: [{:name "Alpha"}, {:name "Beta"}, {:name "Gamma"}] 有没有更好的方式来表达这一点,而不是这张杂乱无章的地图 (map #(identity {:name %}) coll) 您可以简单地使用fn: (map (fn [v] {:name v}) coll) 如果要使用匿名函数语法,

如果我有一个特定形状的集合:

["Alpha", "Beta", "Gamma"]  ;; vector of strings
我想通过包装每个元素来转换它:

[{:name "Alpha"}, {:name "Beta"}, {:name "Gamma"}]
有没有更好的方式来表达这一点,而不是这张杂乱无章的地图

(map #(identity {:name %}) coll)

您可以简单地使用
fn

(map (fn [v] {:name v}) coll)
如果要使用匿名函数语法,可以使用
数组映射
构造映射:

(map #(array-map :name %) coll)

如果您不喜欢将
映射为
(fn[v]{:name v})
,您可以使用
进行

(for [v coll] {:name v})
;; => ({:name "Alpha"} {:name "Beta"} {:name "Gamma"})

谢谢Lee的
map
突出显示了正在执行的底层操作,因此我认为这是一个更好的选择。我非常喜欢
#({name%})
,简短易读,您也可以使用
do
而不是箭头
哈希映射。我只是找到了一些建议,告诉你什么时候可能需要一个v.s.另一个(至少Clojure库似乎是如何处理的)。