How to filter a persistent map in Clojure?

前端 未结 6 1251
情歌与酒
情歌与酒 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:21

    Per your comment to Michał Marczyk:

    (defn filter* [f map]
      (reduce (fn [m [k v :as x]]
                (if-not (f x)
                  (dissoc m k)
                  m))
              map map))
    
    user> (filter* #(-> % val (= 1)) {:a 1 :b 1 :c 2})
    {:a 1, :b 1}
    

    I don't see that you're going to gain much with this vs. Michał's version.

提交回复
热议问题