Hash join: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 440: | Line 440: | ||
{28 Alan} {Alan Zombies} |
{28 Alan} {Alan Zombies} |
||
{28 Glory} {Glory Buffy} |
{28 Glory} {Glory Buffy} |
||
</pre> |
|||
=={{header|Groovy}}== |
|||
<lang Groovy> |
|||
def hashJoin(s, r) { |
|||
def hashed = s.groupBy { sItem -> sItem.name } |
|||
def q = [] as Set |
|||
r.each { rItem -> |
|||
def join = hashed[rItem.name] |
|||
join.each { sItem -> |
|||
q << sItem.plus(rItem) |
|||
} |
|||
} |
|||
q |
|||
} |
|||
</lang> |
|||
Sample run: |
|||
<pre> |
|||
def s = [[age: 27, name: 'Jonah'], |
|||
[age: 18, name: 'Alan'], |
|||
[age: 28, name: 'Glory'], |
|||
[age: 18, name: 'Popeye'], |
|||
[age: 28, name: 'Alan']] |
|||
def r = [[name: 'Jonah', nemesis: 'Whales'], |
|||
[name: 'Jonah', nemesis: 'Spiders'], |
|||
[name: 'Alan', nemesis: 'Ghosts'], |
|||
[name: 'Alan', nemesis: 'Zombies'], |
|||
[name: 'Glory', nemesis: 'Buffy']] |
|||
hashJoin(s, r).sort {it.name}.each { println it } |
|||
</pre> |
|||
produces: |
|||
<pre> |
|||
[age:18, name:Alan, nemesis:Ghosts] |
|||
[age:28, name:Alan, nemesis:Ghosts] |
|||
[age:18, name:Alan, nemesis:Zombies] |
|||
[age:28, name:Alan, nemesis:Zombies] |
|||
[age:28, name:Glory, nemesis:Buffy] |
|||
[age:27, name:Jonah, nemesis:Whales] |
|||
[age:27, name:Jonah, nemesis:Spiders] |
|||
</pre> |
</pre> |
||