【问题标题】:Clojure - Filter keys from a map [duplicate]Clojure - 从地图中过滤键[重复]
【发布时间】:2020-05-28 19:30:53
【问题描述】:

假设我有一个哈希图,我想通过给定向量中提供的键过滤掉条目。例如假设我有 1. 地图:{:k1 "v1" :k2 "v2" :k3 "v3"} 2. 列表:[:k2 :k4]

我想留下k1,k3

我目前的解决方案是:

(defn rr
  "remove key that are in set from the map"
  [m1 s]
  (loop [mm m1 ss s]
    (if (first ss)
      (recur (dissoc mm (first ss)) (rest ss))
      mm)))

想知道你有更漂亮的解决方案吗?

【问题讨论】:

  • (apply dissoc {:k1 "v1" :k2 "v2" :k3 "v3"} [:k2 :k4]) ,因为dissoc可以带多个key来移除,所以可以用apply对key集合进行操作,否则你可以使用reduce同样的方式:(reduce dissoc {:k1 "v1" :k2 "v2" :k3 "v3"} [:k2 :k4])
  • 如果您的评论是一个答案,@leetwinski。它可以被选为正确答案。 :-)
  • @leetwinski 你能写下你的评论作为答案吗?

标签: clojure


【解决方案1】:

(apply dissoc {:k1 "v1" :k2 "v2" :k3 "v3"} [:k2 :k4])

由于dissoc可以取出多个key,所以可以通过apply对key集合进行操作,也可以同理使用reduce:

(reduce dissoc {:k1 "v1" :k2 "v2" :k3 "v3"} [:k2 :k4])

所以你的函数rr 可能是:

(def dissoc-keyset (partial apply dissoc))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多