2
我有一個我需要合併的未映射序列的地圖(電視節目),這意味着結果序列是基於特殊鍵(:title)而唯一的,而其他鍵與重複項合併。把它看作是把一個特定電視節目的所有放映合併成一個單獨的條目,以保存所有關於它們的信息。我該如何減少Clojure序列
的程序看起來像這樣(簡化):
[{: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))))))
我試圖找出如何做到這一點的合併並行。但是,由於在循環的每次迭代之後,起始序列的「隨機」元素將被刪除,因此必須採取一些分而治之的方法。
有關如何做到這一點的任何想法?