Clojure 过滤具有复杂嵌套结构的地图
对复杂嵌套结构的嵌套字段施加条件的最佳方法是什么,如Clojure 过滤具有复杂嵌套结构的地图,clojure,Clojure,对复杂嵌套结构的嵌套字段施加条件的最佳方法是什么,如 { :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 {
{
: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"}
}
}
}
我想检查“I”部分是否存在,在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"}
}
}
}
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"}}}])