Clojure:根据另一个集合查找集合中缺少的记录
我有两个向量:雇佣和emp收入。我想在emp收入的基础上循环查找所有缺失的记录。在本例中,它缺少id=2。我想在emp收入中创建缺失的记录,并将收入设置为前一个记录的收入值。在clojure中最好的方法是什么Clojure:根据另一个集合查找集合中缺少的记录,clojure,Clojure,我有两个向量:雇佣和emp收入。我想在emp收入的基础上循环查找所有缺失的记录。在本例中,它缺少id=2。我想在emp收入中创建缺失的记录,并将收入设置为前一个记录的收入值。在clojure中最好的方法是什么 (def employ [{:id 1 :name "Aaron"} {:id 2 :name "Ben"} {:id 3 :name "Carry"}]) 发件人: 致: 您可以使用: (let [emp-id->income (into {} (map (fn
(def employ
[{:id 1 :name "Aaron"}
{:id 2 :name "Ben"}
{:id 3 :name "Carry"}])
发件人:
致:
您可以使用:
(let [emp-id->income (into {} (map (fn [rec] [(:emp-id rec) rec]) emp-income))]
(reduce (fn [acc {:keys [id]}]
(let [{:keys [income]} (or (get emp-id->income id) (peek acc))]
(conj acc {:emp-id id :income income})))
[]
employ))
注意:如果在emp income
中找不到第一条记录,这将创建{:emp id:income nil}
的记录。如果在emp income
中找到重复的:emp id
值,它还将使用遇到的最后一个:emp id
(def emp-income
[{:emp-id 1 :income 1000}
{:emp-id 2 :income 1000}
{:emp-id 3 :income 2000}])
(let [emp-id->income (into {} (map (fn [rec] [(:emp-id rec) rec]) emp-income))]
(reduce (fn [acc {:keys [id]}]
(let [{:keys [income]} (or (get emp-id->income id) (peek acc))]
(conj acc {:emp-id id :income income})))
[]
employ))