gpt4 book ai didi

clojure assoc-if 和 assoc-if-new

转载 作者:行者123 更新时间:2023-12-02 21:29:15 25 4
gpt4 key购买 nike

我想向 map 添加条目,但前提是该 map 不包含我要添加的键。 IE。我想做插入但不想更新。我为他创建了 2 个函数:

(defn assoc-if [pred coll k v]
(if pred (assoc coll k v) coll))

(defn assoc-if-new [coll k v]
(assoc-if (not (contains? coll k)) coll k v))

我的问题是,这两个函数还不存在吗?

另外,我对 Clojure 还很陌生,有关于实现的建议吗?

最佳答案

merge右手 map 将始终覆盖左手 map ,因此如果您颠倒参数并将它们放入 map 中,您会得到相同的行为:

(assoc-if-new {:a 1 :b 2} :b 3)
;=> {:a 1, :b 2}

(assoc-if-new {:a 1 :b 2} :c 3)
;=> {:c 3, :a 1, :b 2}

(merge {:b 3} {:a 1 :b 2})
;=> {:a 1, :b 2}

(merge {:c 3} {:a 1 :b 2})
;=> {:b 2, :a 1, :c 3}

换句话说:

(defn assoc-if-new [coll k v] (merge {k v} coll))

关于clojure assoc-if 和 assoc-if-new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com