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