मैं क्लोजर के लिए बिल्कुल नया हूँ।

मेरे पास एक JSON है जैसे: { "1": true, "2": false, "3": true, "4": false }

मैं चाबियों की एक सरणी बनाना चाहता हूं जिसके लिए क्लोजर में मान सत्य है। इस उदाहरण में सरणी ["1", "3"] होनी चाहिए।

क्रिप्या मेरि सहायता करे। किसी भी सहायता की सराहना की जाएगी।

0
Tessy Thomas 19 जुलाई 2018, 15:48

6 जवाब

सबसे बढ़िया उत्तर

उसके लिए कुछ छोटे और सरल स्निपेट भी हैं:

user> (filter m (keys m))
;;=> ("1" "3")

user> (keep (fn [[k v]] (when v k)) m)
;;=> ("1" "3")

user> (for [[k v] m :when v] k)
;;=> ("1" "3")
8
leetwinski 19 जुलाई 2018, 18:35

यदि आप किसी सरणी के बजाय वेक्टर का उपयोग करने के साथ ठीक हैं (चूंकि आप आमतौर पर क्लोजर में वैक्टर का उपयोग कर रहे हैं), तो आप कुछ ऐसा कर सकते हैं।

(defn keys-for-truthy-vals [m]
  (->> m (filter val) (mapv key)))

नोट mapv केवल इसलिए है कि मैप कॉल एक वेक्टर लौटाता है। यदि आप seq चाहते हैं, तो बस map का उपयोग करें।

3
Edward Minnix 19 जुलाई 2018, 18:00

अगर आपका नक्शा a है तो (->> (filter (fn [[k v]] v) a) (map (fn [[k v]] k))) जैसा कुछ काम करेगा। आप इसे केवल एक मानचित्र के साथ नहीं कर सकते क्योंकि आपको कुछ मूल्यों को छोड़ने की आवश्यकता है, इसलिए कुछ कम करने या फ़िल्टर करने की आवश्यकता होगी।

0
Alejandro C. 19 जुलाई 2018, 15:53

शायद यह?

(->> foo (filter second) keys)

जहां फू एक नक्शा है।

0
BWStearns 19 जुलाई 2018, 23:02

जैसा पहले से ही प्रदान किया गया है, बस नक्शे में रहना।

(कुंजी (फिल्टर वैल एम))

0
aptr322 21 जुलाई 2018, 01:07