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

「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"}
            }   
        }
}
4

1 に答える 1

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"}}}])
于 2012-04-12T18:08:23.110 に答える