Hash join: Difference between revisions
Content added Content deleted
(Ruby restored because it was overwritten by mistake.) |
|||
Line 1,692: | Line 1,692: | ||
28 | Alan || Alan | Ghosts |
28 | Alan || Alan | Ghosts |
||
28 | Glory || Glory | Buffy |
28 | Glory || Glory | Buffy |
||
</pre> |
|||
=={{header|Ruby}}== |
|||
<lang ruby>def hashJoin(table1, index1, table2, index2) |
|||
# hash phase |
|||
h = table1.group_by {|s| s[index1]} |
|||
h.default = [] |
|||
# join phase |
|||
table2.collect {|r| |
|||
h[r[index2]].collect {|s| [s, r]} |
|||
}.flatten(1) |
|||
end |
|||
table1 = [[27, "Jonah"], |
|||
[18, "Alan"], |
|||
[28, "Glory"], |
|||
[18, "Popeye"], |
|||
[28, "Alan"]] |
|||
table2 = [["Jonah", "Whales"], |
|||
["Jonah", "Spiders"], |
|||
["Alan", "Ghosts"], |
|||
["Alan", "Zombies"], |
|||
["Glory", "Buffy"]] |
|||
hashJoin(table1, 1, table2, 0).each { |row| p row }</lang> |
|||
{{out}} |
|||
<pre> |
|||
[[27, "Jonah"], ["Jonah", "Whales"]] |
|||
[[27, "Jonah"], ["Jonah", "Spiders"]] |
|||
[[18, "Alan"], ["Alan", "Ghosts"]] |
|||
[[28, "Alan"], ["Alan", "Ghosts"]] |
|||
[[18, "Alan"], ["Alan", "Zombies"]] |
|||
[[28, "Alan"], ["Alan", "Zombies"]] |
|||
[[28, "Glory"], ["Glory", "Buffy"]] |
|||
</pre> |
</pre> |
||