Hash join: Difference between revisions
Content added Content deleted
(→{{header|Rust}}: Make more idiomatic) |
|||
Line 1,839: | Line 1,839: | ||
[[28 Alan] [Alan Ghosts]] |
[[28 Alan] [Alan Ghosts]] |
||
[[28 Alan] [Alan Zombies]]</pre> |
[[28 Alan] [Alan Zombies]]</pre> |
||
=={{header|Phix}}== |
|||
Phix dictionary keys must be unique, but storing/extending a sequence is no trouble, and in fact simplifies the scan phase. |
|||
<lang Phix>constant A = {{27,"Jonah"}, |
|||
{18,"Alan"}, |
|||
{28,"Glory"}, |
|||
{18,"Popeye"}, |
|||
{28,"Alan"}}, |
|||
B = {{"Jonah","Whales"}, |
|||
{"Jonah","Spiders"}, |
|||
{"Alan", "Ghosts"}, |
|||
{"Alan", "Zombies"}, |
|||
{"Glory","Buffy"}}, |
|||
jA = 2, |
|||
jB = 1, |
|||
MB = new_dict() |
|||
sequence C = {} |
|||
for i=1 to length(B) do |
|||
object key = B[i][jB] |
|||
object data = getd(key,MB) |
|||
if data=0 then |
|||
data = {B[i]} |
|||
else |
|||
data = append(data,B[i]) |
|||
end if |
|||
putd(key,data,MB) |
|||
end for |
|||
for i=1 to length(A) do |
|||
object data = getd(A[i][jA],MB) |
|||
if sequence(data) then |
|||
for j=1 to length(data) do |
|||
C = append(C,{A[i],data[j]}) |
|||
end for |
|||
end if |
|||
end for |
|||
destroy_dict(MB) |
|||
pp(C,{pp_Nest,1})</lang> |
|||
{{out}} |
|||
<pre> |
|||
{{{27, "Jonah"}, {"Jonah", "Whales"}}, |
|||
{{27, "Jonah"}, {"Jonah", "Spiders"}}, |
|||
{{18, "Alan"}, {"Alan", "Ghosts"}}, |
|||
{{18, "Alan"}, {"Alan", "Zombies"}}, |
|||
{{28, "Glory"}, {"Glory", "Buffy"}}, |
|||
{{28, "Alan"}, {"Alan", "Ghosts"}}, |
|||
{{28, "Alan"}, {"Alan", "Zombies"}}} |
|||
</pre> |
|||
=={{header|PHP}}== |
=={{header|PHP}}== |