map-map
, map-map-keys
औरmap-map-values
मुझे इसके लिए क्लोजर में कोई मौजूदा फ़ंक्शन का पता नहीं है, लेकिन यहां उस फ़ंक्शन का एक कार्यान्वयन है क्योंकि map-map-values
आप कॉपी करने के लिए स्वतंत्र हैं। यह दो निकट संबंधी कार्यों के साथ आता है, map-map
और map-map-keys
जो मानक पुस्तकालय से गायब हैं:
(defn map-map
"Returns a new map with each key-value pair in `m` transformed by `f`. `f` takes the arguments `[key value]` and should return a value castable to a map entry, such as `{transformed-key transformed-value}`."
[f m]
(into (empty m) (map #(apply f %) m)) )
(defn map-map-keys [f m]
(map-map (fn [key value] {(f key) value}) m) )
(defn map-map-values [f m]
(map-map (fn [key value] {key (f value)}) m) )
प्रयोग
आप map-map-values
इस तरह से कॉल कर सकते हैं :
(map-map-values str {:a 1 :b 2})
;; => {:a "1", :b "2"}
और इस तरह अन्य दो कार्य:
(map-map-keys str {:a 1 :b 2})
;; => {":a" 1, ":b" 2}
(map-map (fn [k v] {v k}) {:a 1 :b 2})
;; => {1 :a, 2 :b}
वैकल्पिक कार्यान्वयन
यदि आप केवल अधिक सामान्य फ़ंक्शन के बिना map-map-keys
या चाहते हैं , तो आप इन कार्यान्वयनों का उपयोग कर सकते हैं, जो इस पर निर्भर नहीं करते हैं :map-map-values
map-map
map-map
(defn map-map-keys [f m]
(into (empty m)
(for [[key value] m]
{(f key) value} )))
(defn map-map-values [f m]
(into (empty m)
(for [[key value] m]
{key (f value)} )))
इसके अलावा, यहाँ एक वैकल्पिक कार्यान्वयन इसके बजाय map-map
आधारित clojure.walk/walk
है into
, यदि आप इस वाक्यांश को पसंद करते हैं:
(defn map-map [f m]
(clojure.walk/walk #(apply f %) identity m) )
पैरेलल संस्करण - pmap-map
, आदि।
यदि आपको उनकी आवश्यकता है तो इन कार्यों के समानांतर संस्करण भी हैं। वे बस के pmap
बजाय का उपयोग करें map
।
(defn pmap-map [f m]
(into (empty m) (pmap #(apply f %) m)) )
(defn pmap-map-keys [f m]
(pmap-map (fn [key value] {(f key) value}) m) )
(defn pmap-map-values [f m]
(pmap-map (fn [key value] {key (f value)}) m) )