1

我有两组类似于

[{: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”键将第一个序列中的每个地图与第二个序列中的对应地图进行匹配,以便确定新价格。

获得新价格的逻辑似乎很简单,但我似乎无法让两张地图对齐。我认为 map 函数是我需要的,但是在 REPL 中花了一些时间后,我无法产生想要的结果。

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

4

1 回答 1

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}}
于 2013-08-23T14:47:53.187 回答