How to filter a persistent map in Clojure?

前端 未结 6 1298
情歌与酒
情歌与酒 2020-12-28 13:10

I have a persistent map which I want to filter. Something like this:

(filter #(-> % val (= 1)) {:a 1 :b 1 :c 2})

The above comes out as

6条回答
  •  情书的邮戳
    2020-12-28 13:26

    Here's another one using reduce-kv

    (defn filter-kv [pred map]
      (reduce-kv (fn [accumulator key value]
                   (if (pred key value)
                     (assoc accumulator key value)
                     accumulator)) {} map))
    

    Usage

    (filter-kv (fn [key _]
                 (not (= key "a"))) {"a" {:some "a"}
                                     "b" {:some "b"}
                                     "c" {:some "c"}})
    
    >> {"b" {:some "b"}
        "c" {:some "c"}}
    

提交回复
热议问题