2012-04-12 12 views
6

जटिल आंतरिक संरचना की तरह का एकत्रित फ़ील्ड पर एक शर्त लागू करने के लिए एक सबसे अच्छा तरीका है ...फ़िल्टर जटिल आंतरिक संरचना के साथ एक नक्शा

{ 
    :aa {:a "a_val",:b "b_val"}, 
    :qq {:abc 
      { 
       :x1 {:x "abc",:u "ee"}, 
       :x2 {:y "abc",:i "ee"}, 
       :x3 {:x "abc",:i "ee"} 
     } 
     }, 
    :ww {:xyz { 
       :y1 {:x "abc",:u "ee"}, 
       :y2 {:y "abc",:i "0"}, 
       :y3 {:x "abc",:i "ee"} 
       } 
     } 
} 

मैं जाँच करने के लिए है कि क्या "मैं" भाग मौजूद चाहते हो सकता है क्या और aa, qq और ww में से प्रत्येक में "0" मान है और इसके आधार पर aa, qq और ww पर बहिष्कृत (या कोई भी ऑपरेशन निष्पादित करें) पर निर्भर करता है। उदाहरण के लिए "ww" है तो "i" = "0" उस स्थिति में तो एक नक्शे के नीचे

{ 
    :ww {:xyz { 
      :y1 {:x "abc",:u "ee"}, 
      :y2 {:y "abc",:i "0"}, 
      :y3 {:x "abc",:i "ee"} 
      } 
     } 
} 

उत्तर

3
user> (defn vvals [m] (when (map? m) (vals m))) 
'user/vvals 
user> (filter #(some #{"0"} (for [v (vvals (val %)), v (vvals v)] (:i v))) xx) 
([:ww {:xyz {:y3 {:x "abc", :i "ee"}, :y2 {:y "abc", :i "0"}, :y1 {:x "abc", :u "ee"}}}]) 
की तरह मिलता है
संबंधित मुद्दे