2011-07-14 16 views
8

Digamos que tengoUnión interna en clojure

(def test-left 
          [{:name "Sean" :age 27} 
          {:name "Ross" :age 27} 
          {:name "Brian" :age 22}]) 

y

(def test-right 
         [{:owner "Sean" :item "Beer"} 
         {:owner "Sean" :item "Pizza"} 
         {:owner "Ross" :item "Computer"} 
         {:owner "Matt" :item "Bike"}]) 

Cuando hago un (clojure.set/join test-left test-right) puedo obtener un producto cartesiano. 12 filas Lo que quiero es Unión interna en: nombre izquierda =: dueño de los derechos de manera que sólo obtengo los resultados que tienen filas coincidentes en el lado derecho

Así llego

   [{:name "Sean" :age 27 :item “Beer” } 
       {:name "Sean" :age 27 :item “Pizza” } 
       {:name "Ross" :age 27 :item “Computer”}] 

¿Ideas. Similarmente, me gustaría lograr uniones externas izquierda y derecha, pero esa es una pregunta separada. Estoy aprendiendo clojure así que por favor tengan paciencia conmigo

Respuesta

8

Lo tengo. Mi malo

1:24 main-hta=> (clojure.set/join test-left test-right {:name :owner}) 

obtiene

#{{:item "Pizza", :owner "Sean", :name "Sean", :age 27} {:item "Beer", :owner "Sean", :name "Sean", :age 27} {:item "Computer", :owner "Ross", :name "Ross", :ag 
e 27}} 
Cuestiones relacionadas