2012-04-12 46 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"}}}])