Inner-присоединиться в clojure - PullRequest
9 голосов
/ 14 июля 2011

Допустим, у меня есть

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

и

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

Когда я делаю (clojure.set/join test-left test-right), я получаю декартово произведение. 12 рядов. Что я хочу, так это Inner-join on: name of left =: owner of right, так что я получаю только те результаты, у которых совпадают строки в правой части

Так я получаю

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

Любые идеи. Точно так же хотел бы получить левое и правое внешние соединения, но это отдельный вопрос. Я изучаю clojure, поэтому, пожалуйста, потерпите меня

1 Ответ

9 голосов
/ 14 июля 2011

Понял.Мой плохой

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

получает

#{{: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}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...