在Clojure中,我如何创建"添加id to map"功能?

scr*_*tty 5 clojure map

说我有一组地图:

(def coll #{{:name "foo"} {:name "bar"}})
Run Code Online (Sandbox Code Playgroud)

我想要一个函数,它将为集合中的每个地图元素添加一个id(唯一的数字很好).即

#{{:id 1 :name "foo"} {:id 2 :name "bar"}}
Run Code Online (Sandbox Code Playgroud)

以下不起作用,但这是我现在的思路.

(defn add-unique-id [coll]
(map assoc :id (iterate inc 0) coll))
Run Code Online (Sandbox Code Playgroud)

提前致谢...

Bri*_*per 11

如果你想真的,确实ID是唯一的,请使用UUID.

(defn add-id [coll]
  (map #(assoc % :id (str (java.util.UUID/randomUUID))) coll))


Gab*_*iMe 8

怎么样

(defn add-unique-id [coll]
  (map #(assoc  %1 :id %2)  coll (range (count coll))))
Run Code Online (Sandbox Code Playgroud)

要么

(defn add-unique-id [coll]
  (map #(assoc  %1 :id %2)  coll (iterate inc 0)))
Run Code Online (Sandbox Code Playgroud)

  • 也可以只使用(范围),因为这相当于您的迭代 (2认同)