Jump to content

Hash join: Difference between revisions

1,050 bytes added ,  9 years ago
no edit summary
No edit summary
Line 440:
{28 Alan} {Alan Zombies}
{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>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.