我有两套类似于
的地图[{: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中花了一些时间后,我无法产生所需的结果。
有人可以指出我正确的方向吗?
答案 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}}