Как в Clojure создать функцию «добавить идентификатор на карту»? - PullRequest
5 голосов
/ 15 февраля 2010

Скажите, у меня есть коллекция карт:

(def coll #{{:name "foo"} {:name "bar"}})

Я хочу функцию, которая будет добавлять идентификатор (уникальный номер в порядке) для каждого элемента карты в коллекции. т.е.

#{{:id 1 :name "foo"} {:id 2 :name "bar"}}

Следующее НЕ РАБОТАЕТ, но у меня сейчас такое мышление.

(defn add-unique-id [coll]
(map assoc :id (iterate inc 0) coll))

Заранее спасибо ...

Ответы [ 2 ]

11 голосов
/ 15 февраля 2010

Если вы хотите быть действительно, действительно уверены, что идентификаторы уникальны, используйте UUID s.

(defn add-id [coll]
  (map #(assoc % :id (str (java.util.UUID/randomUUID))) coll))
8 голосов
/ 15 февраля 2010

Как насчет

(defn add-unique-id [coll]
  (map #(assoc  %1 :id %2)  coll (range (count coll))))

или

(defn add-unique-id [coll]
  (map #(assoc  %1 :id %2)  coll (iterate inc 0)))
...