gpt4 book ai didi

clojure - 从 map 中删除零值?

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

我有一个 Clojure 映射,其中可能包含 nil 值,我正在尝试编写一个函数来删除它们,但没有取得多大成功(我对此很陌生)。

例如:

(def record {:a 1 :b 2 :c nil})
(merge (for [[k v] record :when (not (nil? v))] {k v}))

这会产生一系列 map ,这不是我期望的合并结果:

({:a 1} {:b 2})

我想要:

{:a 1, :b 2}

最佳答案

您的for列表理解返回映射列表,因此您需要将此列表作为可选参数应用于合并函数:

user> (apply merge (for [[k v] record :when (not (nil? v))] {k v}))
{:b 2, :a 1}

通过将映射作为序列进行过滤并连接成映射来实现更简洁的解决方案:

user> (into {} (filter second record))
{:a 1, :b 2}

不要删除错误值:

user> (into {} (remove (comp nil? second) record))
{:a 1, :b false}

使用dissoc允许持久数据共享,而不是创建全新的 map :

user> (apply dissoc                                                                                            
record
(for [[k v] record :when (nil? v)] k))
{:a 1, :b 2}

关于clojure - 从 map 中删除零值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937661/

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