gpt4 book ai didi

Clojure 深度合并忽略 nil 值

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

我正在尝试在 Clojure 中深度合并多个映射。我在网上找到了很多解决方案,其中大部分看起来像:

(defn deep-merge
[& xs]
(if (every? map? xs)
(apply merge-with deep-merge xs)
(last xs)))

这个解决方案的问题是,如果其中一个映射为 nil,它将删除所有先前的映射(因此,如果最后一个映射为 nil,则整个函数将返回 nil)。常规合并函数的情况并非如此,它会忽略 nil 值。是否有其他简单的深度合并实现可以忽略 nil 值?

最佳答案

我发现这个:https://github.com/circleci/frontend/blob/04701bd314731b6e2a75c40085d13471b696c939/src-cljs/frontend/utils.cljs 。它确实做了它应该做的事情。

(defn deep-merge* [& maps]
(let [f (fn [old new]
(if (and (map? old) (map? new))
(merge-with deep-merge* old new)
new))]
(if (every? map? maps)
(apply merge-with f maps)
(last maps))))

(defn deep-merge [& maps]
(let [maps (filter identity maps)]
(assert (every? map? maps))
(apply merge-with deep-merge* maps)))

谢谢 CircleCi 的人们!

关于Clojure 深度合并忽略 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27130961/

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