这是我的问题:我想要一个函数 helpme
获取 map 并替换键 :r
和 :g
当且仅当这些键存在时才使用空向量。例如:
输入:
(helpme {:a "1" :r ["1" "2" "3"] :g ["4" "5"]})
输出:
{:a "1" :r [] :g []}
输入:
(helpme {:a "1" :r ["1" "2" "3"]})
输出:
{:a "1" :r []}
我可以定义一个函数“helpme”来执行此操作,但它过于复杂,我觉得必须有一种更简单(更惯用)的方法......
这是我完成的过于复杂的方法,如下要求:
(defn c [new-doc k] (if (contains? new-doc k) (assoc new-doc k []) new-doc))
(defn helpme [new-doc] (c (c new-doc :r) :g))
最佳答案
(defn helpme [m]
(into m (for [[k _] (select-keys m [:r :g])]
[k []])))
简而言之,当项目数设置为
[]
时只需要在一处编辑变化。
关于dictionary - Clojure:如果键存在,则惯用更新 map 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136617/