这是我的问题:我需要一个带有 map 的helpme
函数,并且当且仅当这些键存在时,才用空向量替换键: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 []])))
简短,仅当设置为
[]
的项目数发生更改时才需要在一个位置进行编辑。