迭代 Clojure 向量并构建集合向量

Iterate over Clojure vector and build up a vector of sets

我正在建立一个数据交易。我有

(def codes 
   [:first-code :second-code :third-code])

我需要生成这种格式的集合向量:

[
  {:db/id (d/tempid :db.part/region)
   :db/ident :first-code}
  {:db/id (d/tempid :db.part/region)
   :db/ident :second-code}
  {:db/id (d/tempid :db.part/region)
   :db/ident :third-code}
]

我不知道如何按惯用方式执行此操作。

我想你的意思是 "a vector of maps"。下面的代码应该不错:

(mapv
  (fn [code]
    {:db/id '(d/tempid :db.part/region)
     :db/ident code})
  codes)

您可能想要使用for理解:

(let [id '(d/tempid :db.part/region)]
  (vec
    (for [code codes]
      {:db/id id
       :db/ident code})))

mapmapv如果你特别想要一个矢量):

(let [id '(d/tempid :db.part/region)]
  (->> codes
       (mapv (fn [code]
               {:db/id id
                :db/ident code}))))

我很确定有更简单的方法,但这将是一个好的开始:

(vec 
  (map #(into {} {:db/id '(d/tempid :db.part/region) :db/ident %}) codes))