31 lines
587 B
Plaintext
31 lines
587 B
Plaintext
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 }
|