这是我的问题:我需要一个带有 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 []])))

简短,仅当设置为[]的项目数发生更改时才需要在一个位置进行编辑。

10-08 12:46