gpt4 book ai didi

clojure - 如何并行减少 Clojure 序列

转载 作者:行者123 更新时间:2023-12-04 05:11:18 25 4
gpt4 key购买 nike

我有一个未排序的 map 序列(电视节目)需要合并,这意味着生成的序列基于特殊键 (:title) 是唯一的,其他键与重复项合并。可以将其视为将特定电视节目的所有放映合并到一个包含有关它们的所有信息的条目中。

一个程序看起来像这样(简化):

[{:prog {:title "", ...} :starts #{} :directors #{} :actors #{} :categories {}}, ...]

这是我当前执行合并的函数:
(defn- merge-programs [all-programs]
"Merge all instances of the same program"
(loop [acc []
programs all-programs]
(if (empty? programs)
acc
(let [first-prog (first programs)
dups (filter #(= (:title first-prog) (:title (:prog %))) programs)
merged-prog {:prog first-prog
:starts (apply set/union (map :starts dups))
:directors (apply set/union (map :directors dups))
:actors (apply set/union (map :actors dups))
:categories (apply set/union (map :categories dups))}]
(recur (conj acc merged-prog)
(remove #(= (:title first-prog) (:title (:prog %)))) programs))))))

我试图弄清楚如何并行合并。但是,由于在循环的每次迭代之后,开始序列的“随机”元素都被删除,因此必须采用某种分而治之的方法。

关于如何做到这一点的任何想法?

最佳答案

Reducers Clojure 1.5 中的功能正是您想要的。

关于clojure - 如何并行减少 Clojure 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14901719/

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