2012-04-12 9 views
6

Was wäre ein besten Weg, um eine Bedingung für die verschachtelten Felder komplexer verschachtelter Struktur wie ...Filter eine Karte mit komplexer verschachtelter Struktur

{ 
    :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"} 
       } 
     } 
} 

ich, ob der „i“ Teil überprüfen möchte aufzuzuzwingen existieren und hat den Wert "0" in jedem von aa, qq und ww und abhängig davon, dass aa, qq und ww ausschließen (oder irgendeine Operation ausführen). Zum Beispiel, wenn "ww" hat "i" = "0" an dieser Position erhält dann eine Karte wie unten

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

Antwort

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"}}}]) 
Verwandte Themen