在 clojure 中操作地图的两个向量

神童

我需要实现一个函数,采用两个地图向量并返回一种组合的一个地图向量。详情如下:

输入 1: [{:id 1 :car "A" :price 10}{:id 2 :car "B" :price 20}{:id 3 :car "C" :price 30}]

输入 2: [{:id 4 :car "A" :price 5}{:id 5 :car "B" :price 30}{:id 6 :car "D" :price 40}]

输出: [{:id 4 :car "A" :price 5} {:id 2 :car "B" :price 20} {:id 3 :car "C" :price 30} {:id 6 :car "D" :price 40}]

也就是说,如果:car相同,则取价格的最小值,或直接添加到输出中:id

我曾考虑使用 map 来获取每个值以在嵌套循环中进行比较,但我认为这不是一个很好的方法。然后我学习了clojure.walkjuxt 之类的东西,但它们看起来很花哨,需要更多解释。

我认为另一个可能的抽象解决方案是将它们连接在一起,并使用标志检查矢量中的每个地图来检查价格。拿起最小的并移除较大的。

我希望你能帮助我,非常感谢你!

莱特温斯基

一种方法是将项目分组:car,然后找到每个组的最低价格值:

user> (->> (concat data1 data2)
           (group-by :car)
           vals
           (map #(apply min-key :price %)))

;;=>({:id 4, :car "A", :price 5} {:id 2, :car "B", :price 20} {:id 3, :car "C", :price 30} {:id 6, :car "D", :price 40})

你也可以用 一次性完成reduce,这有点冗长,但应该有更好的性能:

(defn process [& colls]
  (vals (reduce (fn [acc {car :car :as item}]
                  (if (acc car)
                    (update acc car (partial min-key :price) item)
                    (assoc acc car item)))
                {}
                (apply concat colls))))

user> (process data1 data2)
;;=> ({:id 4, :car "A", :price 5} {:id 2, :car "B", :price 20} {:id 3, :car "C", :price 30} {:id 6, :car "D", :price 40})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Clojure中,如何合并两个地图向量?

来自分类Dev

如何在Clojure中创建具有两个列表(或向量)的地图?

来自分类Dev

从Clojure中的两个向量创建子向量

来自分类Dev

从Clojure中的两个向量创建子向量

来自分类Dev

Clojure中两个地图之间的交点

来自分类Dev

Clojure-合并两个不同大小的向量的向量

来自分类Dev

从Clojure中的向量构造地图

来自分类Dev

Clojure-在哈希图向量中,返回两个键匹配的最低哈希图

来自分类Dev

如何在Clojure中交错两个长度不同的向量

来自分类Dev

更新Clojure中的地图向量中的值

来自分类Dev

在 Clojure 中从地图构建嵌套向量

来自分类Dev

Clojure中的向量与向量

来自分类Dev

合并Clojure中的地图

来自分类Dev

合并Clojure中的地图

来自分类Dev

在 Clojure 中迭代地图

来自分类Dev

Clojure中的向量相等

来自分类Dev

在Clojure中迭代向量

来自分类Dev

在clojure中的两个集合之间实现XOR

来自分类Dev

是否可以将clojure向量解构为最后两个项目,然后剩下的两个项目?

来自分类Dev

是否有Clojure函数来“连接”两个地图列表?

来自分类Dev

Clojure方法来更新向量中的地图

来自分类Dev

在 clojure 中,为什么 core.match 向量内的地图?

来自分类Dev

Clojure:地图地图

来自分类Dev

是否在Clojure中订购地图?

来自分类Dev

从Clojure函数中返回地图

来自分类Dev

Clojure:将两个向量与新的键和值合并到一个映射中

来自分类Dev

反转Clojure中的向量(菜鸟)

来自分类Dev

反转Clojure中的向量(菜鸟)

来自分类Dev

Clojure在地图和向量之间决定