20 lines
529 B
Plaintext
20 lines
529 B
Plaintext
function hashjoin(A::Array, ja::Int, B::Array, jb::Int)
|
|
M = Dict(t[jb] => filter(l -> l[jb] == t[jb], B) for t in B)
|
|
return collect([a, b] for a in A for b in get(M, a[ja], ()))
|
|
end
|
|
|
|
table1 = [(27, "Jonah"),
|
|
(18, "Alan"),
|
|
(28, "Glory"),
|
|
(18, "Popeye"),
|
|
(28, "Alan")]
|
|
table2 = [("Jonah", "Whales"),
|
|
("Jonah", "Spiders"),
|
|
("Alan", "Ghosts"),
|
|
("Alan", "Zombies"),
|
|
("Glory", "Buffy")]
|
|
|
|
for r in hashjoin(table1, 2, table2, 1)
|
|
println(r)
|
|
end
|