gpt4 book ai didi

clojure - Clojure 中集合的更新?

转载 作者:行者123 更新时间:2023-12-04 03:10:45 26 4
gpt4 key购买 nike

我有一系列这样的元素:

(def my-set
#{
{:id "ab" :a 1 :b 2}
{:id "abc" :a 1 :b 2}
{:id "abcd" :a 1 :b 2}
}
)

:我希望像这样更新其中一项:

(update-in-set    my-set  :id  "abc"   {:id "abc" :a 6 :b 20})

.那会返回:

  #{
{:id "ab" :a 1 :b 2}
{:id "abc" :a 6 :b 20}
{:id "abcd" :a 1 :b 2}
}

:是否有任何 Clojure 内置函数或其他简单方法可以做到这一点?

更新

最后我这样做了:

(defn update-in-set    [my-set  key  value  new-record]
(merge (clojure.set/select #(not= (get % key) value) my-set ) new-record)
)

最佳答案

我想知道你是否不应该在这里使用 map 而不是集合,以 id 为键。然后,您可以使用 assoc 轻松执行您想要执行的操作。

您遇到了问题,因为集合并没有真正更新值的想法 - 每个项目都是唯一的,存在或不存在 - 所以您需要做的是删除旧值并添加新值。使用 conjdisj 我认为这可以更容易地完成:

(conj (disj #{'a 'b 'c} 'a) 'e)

这将删除 'a 并添加 'e。这假设您有某种方法可以从“ key ”中获取完整的项目。

关于clojure - Clojure 中集合的更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888304/

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