2013-08-23 49 views
1

我有兩套相似的地圖以的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「鍵,以便我可以確定新的價格。

獲得新價格的邏輯似乎很直接,但我似乎無法得到兩個地圖排隊。我認爲map函數是我需要的,但是在REPL中花費了一些時間之後,我無法產生期望的結果。

難道有人請指點我正確的方向嗎?

回答

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}}