Hash join: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
|||
Line 1,716: | Line 1,716: | ||
28 Alan Alan Zombies |
28 Alan Alan Zombies |
||
</pre> |
</pre> |
||
=={{header|Lua}}== |
|||
<lang lua>local function recA(age, name) return { Age=age, Name=name } end |
|||
local tabA = { recA(27,"Jonah"), recA(18,"Alan"), recA(28,"Glory"), recA(18,"Popeye"), recA(28,"Alan") } |
|||
local function recB(character, nemesis) return { Character=character, Nemesis=nemesis } end |
|||
local tabB = { recB("Jonah","Whales"), recB("Jonah","Spiders"), recB("Alan","Ghosts"), recB("Alan","Zombies"), recB("Glory","Buffy") } |
|||
local function hashjoin(taba, cola, tabb, colb) |
|||
local hash, join = {}, {} |
|||
for _,rowa in pairs(taba) do |
|||
if (not hash[rowa[cola]]) then hash[rowa[cola]] = {} end |
|||
table.insert(hash[rowa[cola]], rowa) |
|||
end |
|||
for _,rowb in pairs(tabb) do |
|||
for _,rowa in pairs(hash[rowb[colb]]) do |
|||
join[#join+1] = { A=rowa, B=rowb } |
|||
end |
|||
end |
|||
return join |
|||
end |
|||
for _,row in pairs(hashjoin(tabA, "Name", tabB, "Character")) do |
|||
print(row.A.Age, row.A.Name, row.B.Character, row.B.Nemesis) |
|||
end</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> |
|||
=={{header|LFE}}== |
=={{header|LFE}}== |