Hash join
func hashJoin(table1, index1, table2, index2) {
var a = []
var h = Hash()
# hash phase
table1.each { |s|
h{s[index1]} := [] << s
}
# join phase
table2.each { |r|
a += h{r[index2]}.map{[_,r]}
}
return a
}
var t1 = [[27, "Jonah"],
[18, "Alan"],
[28, "Glory"],
[18, "Popeye"],
[28, "Alan"]]
var t2 = [["Jonah", "Whales"],
["Jonah", "Spiders"],
["Alan", "Ghosts"],
["Alan", "Zombies"],
["Glory", "Buffy"]]
hashJoin(t1, 1, t2, 0).each { .say }Output:
Last updated
Was this helpful?