clojure - 将转导输出与输入结合到哈希图中
问题描述
我想尽可能惯用地在 Clojure 中执行以下操作:
- 转换集合
- 将输入集合的每个元素与输出集合中的相应元素相关联
- 在哈希图中返回结果
有没有一种简洁的方法可以使用核心库函数来做到这一点?
如果没有,您可以对以下实施提出哪些改进建议?
(defn to-hash [coll xform]
(reduce
merge
(map
#(apply hash-map %)
(mapcat hash-map coll (into [] xform coll)))))
解决方案
像这样的东西应该可以在没有中间集合的情况下解决问题:
(defn process [data xform]
(zipmap data (eduction xform data)))
user> (process [1 2 3] (comp (map inc) (map #(* % %))))
;;=> {1 4, 2 9, 3 16}
关于教育的文档说以下内容:
将传感器的可简化/可迭代应用程序返回到 coll 中的项目。换能器按顺序应用,就像与 comp 结合使用一样。请注意,每次调用 reduce/iterator 时都会执行这些应用程序。
所以不会创建额外的集合。
当然,只要输入和输出元素之间存在一对一的关系,这样就可以了。(process [1 -2 3] (filter pos?))
or的期望输出是什么(process [1 1 1 2 2 2] (dedupe))
?
(顺便说一句,你的to-hash
实现有同样的缺陷)
推荐阅读
- angular - 如何从 API 在数据表 Angular 4 中显示图像
- rabbitmq - Apache Beam:是否可以使用交换和路由密钥来接收 RabbitMQ 的消息
- python - 如何将 Numpy 数组值分配给其他变量
- php - php 未找到或无法统计
- python-3.x - 使用 TensorFlow 训练 CNN 时如何修复“OutOfRangeError:序列结束”错误?
- php - 当用户填写表格时,当他点击“保存”时,他的数据作为副本存储在数据库中
- sql - 检查数字是否在算术级数中
- mysql - 我有两个表,一个自动填充第二个表的触发器。如何获取数据以便自动避免属性的空值?
- javascript - 如何在不刷新页面的情况下计算 php 中的视频观看次数
- activerecord - 在活动记录中延迟加载 VS 急切加载 - Rails