How can I get the nested keys of a map in clojure?

后端 未结 11 1140
梦如初夏
梦如初夏 2020-12-15 10:59

if my structure is

{ :a :A
  :b :B
  :c {
       :d :D
     }
  :e {
       :f {
            :g :G
            :h :H
          }
     }
}

I

11条回答
  •  伪装坚强ぢ
    2020-12-15 11:23

    (defn keys-in [m]
      (if (map? m)
        (vec 
         (mapcat (fn [[k v]]
                   (let [sub (keys-in v)
                         nested (map #(into [k] %) (filter (comp not empty?) sub))]
                     (if (seq nested)
                       nested
                       [[k]])))
                 m))
        []))
    
    ;; tests
    user=> (keys-in nil)
    []
    user=> (keys-in {})
    []
    user=> (keys-in {:a 1 :b 2}))
    [[:a] [:b]]
    user=> (keys-in {:a {:b {:c 1}}})
    [[:a :b :c]]
    user=> (keys-in {:a {:b {:c 1}} :d {:e {:f 2}}})
    [[:a :b :c] [:d :e :f]]
    

提交回复
热议问题