clojure是否有merge if exists函数?
clojure是否具有合并两个映射的merge if exists函数, 像 返回一个包含map1所有键的新映射,如果一个键出现在多个映射中,则使用此键的map2值作为返回映射值,否则使用map1值 e、 gclojure是否有merge if exists函数?,clojure,Clojure,clojure是否具有合并两个映射的merge if exists函数, 像 返回一个包含map1所有键的新映射,如果一个键出现在多个映射中,则使用此键的map2值作为返回映射值,否则使用map1值 e、 g 如何编写此函数?您可以按如下方式执行: defn合并保持左[左/右] 选择“关键点”“合并左-右关键点”“左” 此函数来自的一篇文章。他还在blogpost中展示了替代实现。您可以使用merge和select键定义它: 或使用reduce kv的更快/更高效版本: (defn merge-
如何编写此函数?您可以按如下方式执行: defn合并保持左[左/右] 选择“关键点”“合并左-右关键点”“左”
此函数来自的一篇文章。他还在blogpost中展示了替代实现。您可以使用merge和select键定义它: 或使用reduce kv的更快/更高效版本:
(defn merge-if-exists [map1 map2])
(merge-if-exists {:a 1 :b 2} {:b 3})
;=> {:a 1, :b 3}
(merge-if-exists {:a 1 :b 2} {:c 3})
;=> {:a 1, :b 2}
(merge-if-exists{:b 3} {:a 1 :b 2})
;=> {:b 2}
(defn merge-if-exists [m1 m2]
(merge m1 (select-keys m2 (keys m1))))
(merge-if-exists {:a 1 :b 2} {:b 3})
=> {:a 1, :b 3}
(merge-if-exists {:a 1 :b 2} {:c 3})
=> {:a 1, :b 2}
(merge-if-exists {:b 3} {:a 1 :b 2})
=> {:b 2}
(defn merge-if-exists [m1 m2]
(reduce-kv
(fn [m k v]
(assoc m k (if-let [r (find m2 k)]
(val r)
v)))
{}
m1))