(dissoc :a m)
特定のキーを分離できます。ただし、述語関数を使用して、predがtrueであるキーを分離する方法はありますか?(dissoc-with-pred pred? m)
したがって、マップ{:a 2 :b 3 :c 1 :d 4}
(dissoc-with-pred (fn [[kv]] (> v 2) m)
が与えられると、{:a 2 :c 1}
(dissoc :a m)
特定のキーを分離できます。ただし、述語関数を使用して、predがtrueであるキーを分離する方法はありますか?(dissoc-with-pred pred? m)
したがって、マップ{:a 2 :b 3 :c 1 :d 4}
(dissoc-with-pred (fn [[kv]] (> v 2) m)
が与えられると、{:a 2 :c 1}
バージョン1
(defn dissoc-with-pred [f m]
(reduce-kv (fn [res k v]
(if (f k v)
(assoc res k v)
res))
{} m))
編集。
バージョン2(Chouserが提案)
(defn dissoc-with-pred [f m]
(reduce-kv (fn [m k v]
(if (f k v)
m
(dissoc m k)))
m m))
バージョン3
(defn dissoc-with-pred [f m]
(into {} (filter (fn [[k v]] (f k v)) m)))
テスト
(dissoc-with-pred (fn [k v] (> v 2)) {:a 2 :b 3 :c 1 :d 4})
=> {:b 3, :d 4}