动态矢量/列表创建

时间:2017-07-18 01:59:07

标签: clojure

我是Clojure的新手,我想动态制作一个矢量/列表。

我已经构建了这个函数generate-map,它返回map,如:

{:key 1, :value 1, :other [...]}

在另一个功能get-statement中,我有一个doseq来调用此generate-map函数。

(defn get-statement
  [st] 
  (doseq [s st] (generate-map s)))

我想构建一张地图,通过generate-maps电话加入所有这些doseq次回复,例如:

[{:key 1, :value 1, :other [...]}
 {:key 2, :value 2, :other [...]}
 {:key 3, :value 3, :other [...]}]

我该怎么做?谢谢!

1 个答案:

答案 0 :(得分:4)

如果您想创建一些地图并将它们放入矢量中,只需使用for,混合使用vec(into [] ...)

(into [] ; ... and place them in a vector
  (for [d data] ; ...for each datum in data...
    (generate-map d))) ; Generate a map...

mapv

(mapv generate-map data) ; Super succinct!

永远不要将doseq用于此类内容。 doseq并未返回任何内容,因此您必须使用某些atom或其他效果混乱来实际获取任何内容。

  • 当您需要执行副作用时使用doseq,并且不要直接需要任何结果。

  • 如果您在循环后需要结果,请使用formapreduce(或任何其他功能循环结构)。