2011-09-05 8 views
6

अभी भी प्रोग्रामिंग सामूहिक खुफिया जानकारी के माध्यम से काम कर रहा है और कोड लिखने के लिए क्लोजर का उपयोग कर रहा है। मुझे यह काम मिल गया है, लेकिन कुछ हिस्सों में वास्तव में बदसूरत हैं, इसलिए मैंने सोचा कि मैं इसे साफ करने में मदद के लिए यहां के कुछ विशेषज्ञों से पूछूंगा।किसी अन्य मानचित्र की सामग्री के आधार पर मानचित्र से आइटम को निकालना

की मैं एक नक्शा है कि इस तरह दिखता है ("आरईसी" करने के लिए बाध्य है) लगता है:

{"Superman Returns" 3.902419556891574, "Lady in the Water" 2.8325499182641614, 
"Snakes on a Plane" 3.7059737842895792, "The Night Listener" 3.3477895267131017, 
"You, Me and Dupree" 2.651006036204627, "Just My Luck" 2.5309807037655645} 

और मैं कुंजी है कि नक्शे (करने के लिए बाध्य में भी कर रहे हैं के साथ "उन वस्तुओं को हटाना चाहते हैं mymovies "):

{"Lady in the Water" 2.8325499182641614, "The Night Listener" 3.3477895267131017, 
"Just My Luck" 2.5309807037655645} 
:

{"Snakes on a Plane" 4.5, "You, Me and Dupree" 1.0, "Superman Returns" 4.0} 
ताकि मैं नक्शा मिल

(apply merge (map #(hash-map (first %) (second %)) 
       (remove #(contains? mymovies (first %)) 
         recs))) 

यही मेरे लिए बहुत बदसूरत लगता है:

कोड है कि मैं यह करने के लिए पाने में कामयाब रहे तरह दिखता है। ऐसा लगता है कि मुझे "निकालने" से वापस आने वाले मूल्य से नक्शा बनाने के लिए आवश्यक होना चाहिए। क्या ऐसा करने का कोई क्लीनर तरीका है?

अद्यतन: नीचे जोस्ट का जवाब एक और विचार चमकता है। अगर मैं सेट में दो नक्शे की चाबी बारी मैं चयन कुंजी इस तरह उपयोग कर सकते हैं:

(select-keys recs (difference (set (keys recs)) 
           (set (keys mymovies)))) 

जूस्ट, मुझे चयन कुंजी को चालू करने के लिए धन्यवाद। मुझे पहले उस समारोह के बारे में पता नहीं था। अब इस नए ज्ञात ज्ञान के साथ कई अन्य वर्गों को फिर से लिखने के लिए!

उत्तर

13
(apply dissoc recs (keys mymovies)) 
+0

अच्छा! यकीन नहीं है कि मैं उस समारोह को कैसे चूक गया। सीखने और याद रखने के लिए बहुत सारे कार्य ... –

+0

क्या डेव ने कहा :) –

2

निम्नलिखित पहले रखने के लिए कुंजी की एक सीईसी बनाता है, फिर चयन कुंजी के उपयोग से उन कुंजी के लिए "सबमिप" निकालता है। यह इस तथ्य का भी लाभ उठाता है कि सेट भविष्यवाणी कर रहे हैं।

(select-keys recs (remove (apply hash-set (keys mymovies)) (keys recs))) 
0

मुझे लगता है कि ponzao का जवाब इस मामले के लिए सबसे अच्छा है, लेकिन मैं dissoc लागू करने के लिए सोचा भी नहीं होगा। यहां दो समाधान दिए गए हैं जिनके साथ मैं आ सकता हूं: आशा है कि उन्हें देखकर समान भविष्य की समस्याओं में मदद मिलेगी।

ध्यान दें कि दूसरा समाधान विफल होगा यदि आपका mymovies मानचित्र में शून्य या गलत मान हैं।

(into {} 
     (for [[k v] recs 
      :when (not (contains? mymovies k))] 
     [k v])) 

(into {} 
     (remove (comp mymovies key) recs)) 
संबंधित मुद्दे