合并地图,但有些值为零

所以我有两个可以是任何东西的地图,我想合并它们,但不包括为零的值。假设我有:

(def x {:a "A" :c 5 :d "D"})
(def y {:a 1 :b 2 :c nil})

我想结束

{:a 1 :b 2 :c 5 :d "D"}

如果我只是像 (merge xy) 那样合并,我会得到错误的 :c 值,但是 {:c nil} 在那里。我无法控制进入的两张地图。任何帮助将不胜感激

回答

如果要以不让nil值覆盖非nil值的方式合并哈希映射,可以使用merge-with

dev=> (def x {:a "A" :c 5 :d "D"})
#'dev/x
dev=> (def y {:a 1 :b 2 :c nil})
#'dev/y
dev=> (merge-with (fn [a b] (if (some? b) b a)) x y)
{:a 1, :c 5, :d "D", :b 2}
dev=> 

some?true如果它的参数是任何非nil值,则返回。


以上是合并地图,但有些值为零的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>