【问题标题】:Clojure, update nested content in mapClojure,更新地图中的嵌套内容
【发布时间】:2015-09-26 03:28:10
【问题描述】:

我对更新地图中的值所需的语法感到困惑,其中所述值是地图的向量。

给定一张地图:

   {:data-extracts [
                       {:name "some name"
                        :data "some data"
                        }]}

如何更新 :data 的值,我知道您可以使用 assocconj 修改地图(以及返回新地图),但我不确定在存在嵌套元素时这是如何工作的。

想要的结果:

   {:data-extracts [
                       {:name "some name"
                        :data "new data"
                        }]}

有没有办法做如下的事情?

(update :data-extracts :data "new data")

这是如何实现的?

我尝试了以下方法:

(assoc opts :data-extracts [:name "Secret Escapes"
                            :data "new data"]))

但这并没有像我预期的那样工作。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    使用嵌套结构时,您需要使用*-in-functions(在本例中为assoc-in)并为每个嵌套级别指定一个键。在向量的情况下,它只是索引,在地图的情况下很明显:

    (assoc-in [:data-extracts 0 :data] "new data") 
    

    【讨论】:

    • 如果我在上面指定我的地图,如 (update-in my-map [:data-extracts 0 :data] "new data") 告诉我字符串不能转换为函数。猜测是因为"new data" 不是字符串
    • @ChrisEdwards 查看最新编辑。我意识到在发布后不久,擦除了答案并对其进行了编辑。很抱歉造成混乱。
    • 我确实遇到了 assoc-in,但无法弄清楚我的用例的语法。谢谢。
    • 问题是,update 使用给定函数作用于现有值,当assoc 只是将给定值写入 (...就持久数据结构而言,它有点不同,但你明白了)。
    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多