Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure是否有merge if exists函数?_Clojure - Fatal编程技术网

clojure是否有merge if exists函数?

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

clojure是否具有合并两个映射的merge if exists函数, 像

返回一个包含map1所有键的新映射,如果一个键出现在多个映射中,则使用此键的map2值作为返回映射值,否则使用map1值

e、 g


如何编写此函数?

您可以按如下方式执行:

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))