2012-04-12 36 views
6

Điều gì sẽ là một cách tốt nhất để áp đặt một điều kiện trên các lĩnh vực lồng nhau của các cấu trúc lồng nhau phức tạp như ...Lọc một bản đồ với cấu trúc lồng nhau phức tạp

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

Tôi muốn kiểm tra xem "i" phần tồn tại và có giá trị "0" trong mỗi aa, qq và ww và tùy thuộc vào loại trừ (hoặc thực hiện bất kỳ thao tác nào) trên aa, qq và ww. Ví dụ, nếu "ww" có "i" = "0" ở vị trí đó sau đó nhận được một bản đồ như dưới đây

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

Trả lời

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"}}}]) 
Các vấn đề liên quan