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库似乎是如何处理的)。