簡體   English   中英

Clojure:根據另一個集合查找集合中丟失的記錄

[英]Clojure: Find missing records in a collection based on another collection

我有 2 個向量:employ 和 emp-income。 我想通過基於雇佣的 emp-income 循環查找所有丟失的記錄。 在這種情況下,它缺少 id = 2。我想在 emp-income 中創建缺少的記錄並將收入設置為以前記錄的收入值。 在clojure中做到這一點的最佳方法是什么?

(def employ
  [{:id 1 :name "Aaron"}
   {:id 2 :name "Ben"}
   {:id 3 :name "Carry"}])

從:

(def emp-income
  [{:emp-id 1 :income 1000}
   {:emp-id 3 :income 2000}])

到:

 (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))

請注意,如果在emp-income找不到第一條記錄,這將創建一個{:emp-id id :income nil}記錄。 它也將使用最后:emp-id遇到重復是否:emp-id值內發現的emp-income

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM