gpt4 book ai didi

clojure - 用于操作 clojure map 的“jQuery”类型函数

转载 作者:行者123 更新时间:2023-12-04 22:49:23 24 4
gpt4 key购买 nike

有没有jQuery类型的函数来解决遍历嵌套 map 的问题?

例如,如果我有一个如下所示的配置:

  (def fig
{:config
{:example
{:a "a"
:b "b"
:c "c"}
:more
{:a "a"
:b "b"
:c "c"}}})

我仍然没有想出一种使用 assoc 和 dissoc 操作嵌套持久数据结构的好方法。但是,如果有 jquery操作 map 的样式方式,然后我可以编写这样的代码:
  (->  fig
($ [:config :example :a] #(str % "a"))
($ [:config :b] #(str % "b")))

Giving this output:

{:config
{:example
{:a "aa"
:b "bb"
:c "c"}
:more
{:a "a"
:b "bb"
:c "c"}}}

对于选择器来说是这样的:
($ fig [:config :example :a])
;=> "a"

($ fig [:config :b])
;=> {[:config :example :b] "b",
; [:config :more :b] "b"}

所以本质上,我正在寻找 jayq 的实现用于操作 clojure 对象而不是 html dom。

提前致谢!

最佳答案

update-in是更新嵌套 map 的一个很好的功能。

user> (def data {:config
{:example  {:a "a" :b "b" :c "c"}}
:more {:a "a" :b "b" :c "c"}})

user> (pprint (update-in data [:config :example] assoc :d 4))

{:config {:example {:a "a", :c "c", :b "b", :d 4}},
:more {:a "a", :c "c", :b "b"}}
assoc-in可能更接近你想要的
user> (pprint (assoc-in data [:config :example :d] 4))
{:config {:example {:a "a", :c "c", :b "b", :d 4}},
:more {:a "a", :c "c", :b "b"}}

为了在不改变它们的情况下读取值,您可以使用关键字在 map 中查找自己的事实来编写比 jquery 形式更紧凑的形式
user> (-> data :config :example :a)
"a"

关于clojure - 用于操作 clojure map 的“jQuery”类型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267676/

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