clojure - Clojure:根据另一个集合查找集合中缺失的记录
问题描述
我有 2 个向量:employ 和 emp-income。我想根据employee循环遍历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-id id :income nil}
请注意,如果在 中找不到第一条记录,这将创建一条记录emp-income
。:emp-id
如果在 中找到重复:emp-id
值,它也会使用最后遇到的emp-income
。
推荐阅读
- gradle - 运行checkstyle插件时如何排除其他gradle任务
- python - pyinstaller AttributeError:“模块”对象没有属性“compat”
- reactjs - API data not being copied and stored into the state in react, how would I do this?
- c# - 我的情况在 C# 中来自 .net 的 rdlc 报告中未显示 0 和 -1 之间的负值
- azure - AKS - 来自服务器的错误(禁止):用户无法在集群范围内的 API 组“”中创建资源“命名空间”
- c# - 字段初始化不能引用非静态字段?如何解决它?
- google-kubernetes-engine - dask-kubernetes: Issue creating pod with uppercase username
- excel - 保存到excel pandas时出现奇怪的问题
- python - 我正在抓取多个网页,其结果与 Python selenium 中的第一页相同。原因是什么?
- css - Custom Background Image for only one SharePoint 2013 Site Page not the whole site collection