2010-02-14 13 views
5

कहें कि मेरे पास नक्शे का संग्रह है:क्लोजर में मैं "मानचित्र में आईडी जोड़ने" फ़ंक्शन कैसे बना सकता हूं?

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

मुझे एक फ़ंक्शन चाहिए जो संग्रह में प्रत्येक मानचित्र तत्व को एक आईडी (एक अद्वितीय संख्या ठीक है) जोड़ देगा। i.e.

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

निम्नलिखित काम नहीं करते हैं, लेकिन यह वर्तमान में सोचने की रेखा है।

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

अग्रिम धन्यवाद ...

उत्तर

8

कैसे के बारे में

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

आह! आपका दूसरा कार्य वही है जो मैं आलस्य के साथ करने की कोशिश कर रहा था। धन्यवाद! – scrotty

+1

साथ ही साथ (रेंज) का उपयोग कर सकते हैं, क्योंकि यह आपके पुनरावर्तक के बराबर है – amalloy

11

आप सच में, सच यकीन आईडी विशिष्ट हैं होने के लिए चाहते हैं, UUID का उपयोग रों।

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

धन्यवाद, ब्रायन। काश मैं दो सही जवाब दे सकता हूं। Bugspy.net वास्तव में जो कुछ मैं ढूंढ रहा हूं उसे पूरा करता है, लेकिन यदि सत्य विशिष्टता महत्वपूर्ण हो जाती है तो मैं आपके दिमाग को ध्यान में रख रहा हूं। – scrotty

संबंधित मुद्दे