解散地图的多个后代键?

Ann*_*nan 5 clojure

如何搜索和分解多个后代密钥.

例:

(def d {:foo 123
        :bar {
          :baz 456
          :bam {
            :whiz 789}}})

(dissoc-descendents d [:foo :bam])
;->> {:bar {:baz 456}}
Run Code Online (Sandbox Code Playgroud)

Jou*_*nen 6

clojure.walk在这种情况下很有用:

(use 'clojure.walk)
(postwalk #(if (map? %) (dissoc % :foo :bam) %) d)
Run Code Online (Sandbox Code Playgroud)

  • Postwalk进行深度优先遍历.我想对于这种情况,广度优先的遍历搜索效率要好得多,因为如果要移除父节点,那么我们不需要遍历其子节点 (3认同)