Module:TableTools: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(generate an error message when union and intersection functions are called with no arguments) |
(add a complement function) |
||
Line 190: | Line 190: | ||
end |
end |
||
ret[#ret + 1] = val |
ret[#ret + 1] = val |
||
end |
|||
end |
|||
return ret |
|||
end |
|||
--[[ |
|||
------------------------------------------------------------------------------------ |
|||
-- complement |
|||
-- |
|||
-- This returns the relative complement of t1, t2, ..., in tn. The complement |
|||
-- is of key/value pairs. This is equivalent to all the key/value pairs that are in |
|||
-- tn but are not in t1, t2, ... tn-1. |
|||
------------------------------------------------------------------------------------ |
|||
--]] |
|||
function p.complement(...) |
|||
local lim = select('#', ...) |
|||
if lim == 0 then |
|||
error("no arguments passed to 'complement' (minimum is two)", 2) |
|||
elseif lim == 1 then |
|||
error("only one argument passed to 'complement' (minimum is two)", 2) |
|||
end |
|||
-- Now we know that we have at least two sets. |
|||
local ret = select(lim, ...) |
|||
checkType('complement', lim, ret, 'table') |
|||
for i = 1, lim - 1 do |
|||
local t = select(i, ...) |
|||
checkType('complement', i, t, 'table') |
|||
for k, v in pairs(t) do |
|||
if ret[k] == v then |
|||
ret[k] = nil |
|||
end |
|||
end |
end |
||
end |
end |