21 lines
616 B
Clojure
21 lines
616 B
Clojure
(defn hash-join [table1 col1 table2 col2]
|
|
(let [hashed (group-by col1 table1)]
|
|
(flatten
|
|
(for [r table2]
|
|
(for [s (hashed (col2 r))]
|
|
(merge s r))))))
|
|
|
|
(def s '({:age 27 :name "Jonah"}
|
|
{:age 18 :name "Alan"}
|
|
{:age 28 :name "Glory"}
|
|
{:age 18 :name "Popeye"}
|
|
{:age 28 :name "Alan"}))
|
|
|
|
(def r '({:nemesis "Whales" :name "Jonah"}
|
|
{:nemesis "Spiders" :name "Jonah"}
|
|
{:nemesis "Ghosts" :name "Alan"}
|
|
{:nemesis "Zombies" :name "Alan"}
|
|
{:nemesis "Buffy" :name "Glory"}))
|
|
|
|
(pprint (sort-by :name (hash-join s :name r :name)))
|