【问题标题】:In Clojure how could I create an "add id to map" function?在 Clojure 中,我如何创建“将 id 添加到地图”功能?
【发布时间】:2010-02-14 21:57:00
【问题描述】:

假设我有一组地图:

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

我想要一个函数,它可以为集合中的每个地图元素添加一个 id(一个唯一的数字就可以了)。即

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

以下方法行不通,但这是我目前的思路。

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

提前谢谢...

【问题讨论】:

    标签: map clojure


    【解决方案1】:

    如果您想非常非常确定 ID 是唯一的,请使用 UUIDs。

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

    【讨论】:

    • 谢谢你,布赖恩。我希望我能给出两个正确的答案。 Bugspy.net 完全符合我的要求,但如果真正的独特性变得重要,我会牢记您的。
    【解决方案2】:

    怎么样

    (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)))
    

    【讨论】:

    • 啊!你的第二个功能正是我试图用懒惰做的。谢谢!
    • 也可以只使用 (range),因为这相当于你的迭代
    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 2022-01-08
    • 2013-08-16
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多