Module:TableTools: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(fix lim variable in intersection function) |
(add key/value pair union function) |
||
Line 39: | Line 39: | ||
------------------------------------------------------------------------------------ |
------------------------------------------------------------------------------------ |
||
-- union |
-- union |
||
-- |
|||
-- This returns the union of the key/value pairs of n tables. If any of the tables |
|||
-- contain different values for the same table key, the table value is converted |
|||
-- to an array holding all of the different values. |
|||
------------------------------------------------------------------------------------ |
|||
--]] |
|||
function p.union(...) |
|||
local ret, trackArrays = {}, {} |
|||
for i = 1, select('#', ...) do |
|||
local t = select(i, ...) |
|||
for k, v in pairs(t) do |
|||
local retKey = ret[k] |
|||
if retKey == nil then |
|||
ret[k] = v |
|||
elseif retKey ~= v then |
|||
if trackArrays[k] then |
|||
local array = ret[k] |
|||
array[#array + 1] = v |
|||
ret[k] = array |
|||
else |
|||
ret[k] = {ret[k], v} |
|||
trackArrays[k] = true |
|||
end |
|||
end |
|||
end |
|||
end |
|||
return ret |
|||
end |
|||
--[[ |
|||
------------------------------------------------------------------------------------ |
|||
-- valueUnion |
|||
-- |
-- |
||
-- This returns the union of the values of n tables, as an array. For example, for |
-- This returns the union of the values of n tables, as an array. For example, for |
||
Line 45: | Line 77: | ||
------------------------------------------------------------------------------------ |
------------------------------------------------------------------------------------ |
||
--]] |
--]] |
||
function p. |
function p.valueUnion(...) |
||
local vals, ret = {}, {} |
local vals, ret = {}, {} |
||
for i = 1, select('#', ...) do |
for i = 1, select('#', ...) do |
||
Line 70: | Line 102: | ||
------------------------------------------------------------------------------------ |
------------------------------------------------------------------------------------ |
||
-- intersection |
-- intersection |
||
-- |
|||
-- This returns the intersection of the key/value pairs of n tables. Both the key |
|||
-- and the value must match to be included in the resulting table. |
|||
------------------------------------------------------------------------------------ |
|||
--]] |
|||
--[[ |
|||
------------------------------------------------------------------------------------ |
|||
-- valueIntersection |
|||
-- |
-- |
||
-- This returns the intersection of the values of n tables, as an array. For |
-- This returns the intersection of the values of n tables, as an array. For |
||
Line 76: | Line 117: | ||
------------------------------------------------------------------------------------ |
------------------------------------------------------------------------------------ |
||
--]] |
--]] |
||
function p. |
function p.valueIntersection(...) |
||
local vals, ret = {}, {} |
local vals, ret = {}, {} |
||
local lim = select('#', ...) |
local lim = select('#', ...) |