2014-10-21 87 views
1

如果我有地圖的Clojure:添加到地圖

(def v [{:key1 "value 1" :key2 "value2"} {:key1 "value 3" :key2 "value4"}]) 

和地圖的矢量

(def m {:key3 "value2" :key4 "value5"}) 

如何映射M添加到所有地圖矢量v,其中的2的值給定的鍵(在這種情況下,key2和key3)是否相等?

預期的結果會是這樣:

[{:key1 "value 1" :key2 "value2" :key3 "value2" :key4 "value5"} {:key1 "value 3" :key2 "value4"}] 

回答

3

要合併的每個地圖立方米,如果KEY2和k3是平等的:

(map (fn [x] (if (= (:key2 x) (:key3 m)) (merge m x) x)) v) 

=>

({:key3 "value2", :key2 "value2", :key4 "value5", :key1 "value 1"} {:key2 "value4", :key1 "value 3"}) 
+1

也許' mapv'? – galdre 2014-10-21 22:53:01

+0

是的,mapv如果結果需要是一個向量。 – 2014-10-21 22:53:39

+0

我還有一個問題,我有這樣的情況,向量是(defn v2 [](map#(zipmap(create-keys [「url」「title」])%)(func-contents [「url」「標題「]」// event「data-url)))data-url是在這個問題http://bit.ly/1x83gYH和地圖是(defn v1 [](map#(zipmap(create-keys [」name 「」url「])%)(func-contents [」name「」url「]」// artist「」http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=The+Sound+of +音樂及API_KEY = 00c6b7abec24599649bfcecf19c08cf1" )))。在這種情況下,它不起作用,無論如何它都會添加地圖。 – Vesna 2014-10-22 09:45:20