2012-04-12 2 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"는 "내가"= "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"}}}]) 
같은지도를 얻을 수있는 경우
관련 문제