2014-10-21 62 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