WoW:USERAPI tinsertbeforeval: Difference between revisions
m (catfix) |
m (Move page script moved page USERAPI tinsertbeforeval to USERAPI tinsertbeforeval without leaving a redirect) |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 60: | Line 60: | ||
-- tremovebyval: remove a table row given its value | -- tremovebyval: remove a table row given its value | ||
function ''<PREFIX>''_tremovebyval(tab, val) | function ''<PREFIX>''_tremovebyval(tab, val) | ||
for k,v in tab do | for k,v in pairs(tab) do | ||
if(v==val) then | if(v==val) then | ||
table.remove(tab, k); | table.remove(tab, k); | ||
| Line 71: | Line 71: | ||
-- tcount: count table members even if they're not indexed by numbers | -- tcount: count table members even if they're not indexed by numbers | ||
function ''<PREFIX>''_tcount(tab) | function ''<PREFIX>''_tcount(tab) | ||
local n=0 | local n = #tab | ||
if (n == 0) then | |||
for _ in pairs(tab) do | |||
n = n + 1 | |||
end | |||
end | end | ||
return n | return n | ||
end | end | ||
| Line 92: | Line 94: | ||
__NOTOC__ | __NOTOC__ | ||
[[Category:User defined functions]] | [[Category:User defined functions]] | ||
Latest revision as of 04:49, 15 August 2023
This page documents a <i>user-defined function</i> that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.
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