gpt4 book ai didi

clojure - 在 Clojure 中有条件地初始化映射元素

转载 作者:行者123 更新时间:2023-12-03 00:56:55 25 4
gpt4 key购买 nike

我正在寻找最好的方法来有条件地避免在初始化/定义时向 map 添加元素。在这种情况下,如果键的值为 nil,我想避免向映射添加元素。

(defn create-record [data]
(let [res {
:username (data :username)
:first-name (get-in data [:user-info :name :first])
:last-name (get-in data [:user-info :name :last])
:gender (get-in data [:user-info :sex])
}])
)

如果获取结果为零(数据中的性别字段不存在),我不想将性别添加到 map 中。当我创建 map 时有办法做到这一点吗?我可以在创建映射后删除所有值为 nil 的键,但在某些情况下,我希望某些键具有 nil 值,而其他键则根本不在映射中(如果它们具有 nil 值)。

最佳答案

对于这些可选参数,我将使用 mergewhen-let 的组合。

核心思想是合并单个元素映射或将每个可选参数合并为 nil。合并到 nil 不会执行任何操作,因此您不会在 map 中看到 nil。

(defn create-record [data]
(let [res (merge {:username (data :username)
:first-name (get-in data [:user-info :name :first])
:last-name (get-in data [:user-info :name :last])}
(when-let [gender (get-in data [:user-info :sex])]
{:gender gender}))]
res))

根据您需要执行此操作的频率,我建议在 when-let 周围编写一个简短的宏或函数,以使代码更加简洁。

关于clojure - 在 Clojure 中有条件地初始化映射元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992997/

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