This page documents a user-defined function that you can copy and paste into your addon. Replace <PREFIX> with your AddOn's prefix to avoid conflicts between different versions of these functions.
← User defined functions < tinsertbeforeval
Miscellaneous table helper functions.
tinsertbeforeval(tab, valBefore, val) boolRemoved = tremovebyval(tab, val) num = tcount(tab) tcopy(to, from)
Note that tinsertbeforeval and tremovebyval iterate over the table to find their targets; they can be quite slow compared to regular inserts/deletes.
Examples[]
local tab = { "alice", "charles" }
tinsertbeforeval(tab, "charles", "bob");
→ tab: "alice", "bob", "charles"
tinsertbeforeval(tab, "alice", "zeta");
→ tab: "zeta", "alice", "bob", "charles"
bool = tremovebyval(tab, "zeta"); → bool = true bool = tremovebyval(tab, "zeta"); → bool = false
tab2["foo"]="bar"; tab2["abc"]="xyz"; myCount = tcount(tab2); → myCount = 2
tcopy(tab2, tab); → tab2: ["foo"]="bar", ["abc"]="xyz", [1]="alice", [2]="bob", [3]="charles"
Code[]
-- tinsertbeforeval: insert a value before another value (given only values)
-- assumes integer-indexed table, or "before" loses its meaning
function <PREFIX>_tinsertbeforeval(tab, valBefore, val)
for k,v in ipairs(tab) do
if(v==valBefore) then
table.insert(tab, k, val);
return;
end
end
-- print("insertbeforeval: Could not find \""..valBefore.."\". Appending last.");
table.insert(tab, val);
end
-- tremovebyval: remove a table row given its value
function <PREFIX>_tremovebyval(tab, val)
for k,v in pairs(tab) do
if(v==val) then
table.remove(tab, k);
return true;
end
end
return false;
end
-- tcount: count table members even if they're not indexed by numbers
function <PREFIX>_tcount(tab)
local n = #tab
if (n == 0) then
for _ in pairs(tab) do
n = n + 1
end
end
return n
end
-- tcopy: recursively copy contents of one table to another
function <PREFIX>_tcopy(to, from) -- "to" must be a table (possibly empty)
for k,v in pairs(from) do
if(type(v)=="table") then
to[k] = {}
<PREFIX>_tcopy(to[k], v);
else
to[k] = v;
end
end
end