gpt4 book ai didi

clojure - 更改集合中的所有关键字,从命名空间中删除点并替换为破折号

转载 作者:行者123 更新时间:2023-11-30 23:49:02 27 4
gpt4 key购买 nike

如何在映射向量(也包含映射向量)上映射函数以从关键字命名空间中删除所有点?

所以,给定:

[{:my.dotted/namespace "FOO"}
{:my.nested/vec [{:another.dotted/namespace "BAR"
:and.another/one "FIZ"}]}]

变成:
[{:my-dotted/namespace "FOO"}
{:my-nested/vec [{:another-dotted/namespace "BAR"
:and-another/one "FIZ"}]}]

最佳答案

听起来像是 clojure.walk 的工作!

您可以遍历整个数据结构并将转换函数(在我的版本中为 transform-map)应用于所有子表单,当它遇到一个映射的键时(这里使用 dotted->dashed )。

(require '[clojure
[walk :as walk]
[string :as str]])

(defn remove-dots-from-keys
[data]
(let [dotted->dashed #(-> % str (str/replace "." "-") (subs 1) keyword)
transform-map (fn [form]
(if (map? form)
(reduce-kv (fn [acc k v] (assoc acc (dotted->dashed k) v)) {} form)
form))]
(walk/postwalk transform-map data)))

关于clojure - 更改集合中的所有关键字,从命名空间中删除点并替换为破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36723449/

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