Clojure - 根据键值映射两个哈希映射

时间:2013-08-23 14:22:28

标签: map clojure

我有两套类似于

的地图
[{:id 101 :price 40.00} {:id 102 :price 50.00} {:id 103 :price 30.00}]

[{:id 101 :price 45.00} {:id 102 :price 50.00} {:id 103 :price 20.00}]

我试图将第一个序列中的每个地图与基于“id”键的第二个地图中的对应地匹配,以便我可以确定新价格。

获得新价格的逻辑似乎很简单,但我似乎无法将这两张地图排成一行。我认为地图功能将是我需要的但是在REPL中花了一些时间后,我无法产生所需的结果。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

(def data1 [{:id 101 :price 40.00} {:id 102 :price 50.00} {:id 103 :price 30.00}])
(def data2 [{:id 101 :price 45.00} {:id 102 :price 50.00} {:id 103 :price 20.00}])

(require '[clojure.set :as set])

(set/join data1 (map #(set/rename-keys % {:price :new-price}) data2))

;=> #{{:new-price 45.0, :price 40.0, :id 101}
;     {:new-price 20.0, :price 30.0, :id 103}
;     {:new-price 50.0, :price 50.0, :id 102}}