gpt4 book ai didi

Clojure - 使用固定值->键函数映射或设置?

转载 作者:行者123 更新时间:2023-12-02 14:41:28 24 4
gpt4 key购买 nike

我的程序中有相当多的记录,我最终使用其中一个字段作为键放入 map 中。例如

(defrecord Foo. [id afield anotherfield])

然后我会将其添加到以 id 作为键的 map 中。这一切都是完全可行的,但有点乏味,例如当向 map 添加 Foo 的新实例时,我需要首先提取 key 。我想知道 clojure.core 中的某个地方是否已经存在执行此操作的数据结构?

基本上,我想通过在构造集合时为键映射函数(即:id)赋予集合一个值来构造一组 Foo,然后在我想要添加/查找/删除时使用它/...一个值。

所以代替:

(assoc my-map (:id a-foo) a-foo))

我可以说:

(conj my-set a-foo)

更有趣的是,合并和合并支持。

最佳答案

听起来像是一个简单的例子,您希望使用一个函数来消除“乏味”的部分。

例如

(defn my-assoc [some-map some-record]
(assoc some-map (:id some-record) some-record))

如果您经常这样做并且需要不同的关键函数,您可能想尝试更高阶的函数:

(defn my-assoc-builder [id-function]
(fn [some-map some-record]
(assoc some-map (id-function some-record) some-record)))

(def my-assoc-by-id (my-assoc-builder :id))

最后,请注意,您可以使用宏执行相同的操作。然而,关于宏的一个有用的一般规则是除非确实需要它们,否则不要使用它们。因此,在这种情况下,由于可以使用函数轻松完成,因此我建议坚持使用函数。

关于Clojure - 使用固定值->键函数映射或设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016089/

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