(def data {"Bob" {"A" 3.5 "B" 4.5 "C" 2.0}
"Jane" {"A" 2.0 "B" 1.5 "D" 4.0}})
Run Code Online (Sandbox Code Playgroud)
调用
(merge-with + (data "Bob") (data "Jane"))
Run Code Online (Sandbox Code Playgroud)
产生
{"A" 5.5, "B" 6.0, "C" 2.0 "D" 4.0}
Run Code Online (Sandbox Code Playgroud)
我只想创建一个合并的地图,但仅限于公共密钥.我正在寻找的结果是
{"A" 5.5, "B" 6.0}
Run Code Online (Sandbox Code Playgroud)
在clojure中这样做的好方法是什么?
这是一个相当简单的单遍方法,它应该胜过迄今为止建议的多遍方法,而不是特别难以阅读:
(defn merge-matching [f a b]
(into {}
(for [[k v] a
:let [e (find b k)]
:when e]
[k (f v (val e))])))
Run Code Online (Sandbox Code Playgroud)