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

我有两个向量:雇佣和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 [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))