You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.4 KiB
101 lines
2.4 KiB
|
|
-- Table Lib
|
|
local _, app = ...;
|
|
|
|
-- Dependencies
|
|
|
|
-- Concepts:
|
|
-- Encapsulates the functionality concerning consistent and complex operations on Lua Tables
|
|
|
|
-- Global locals
|
|
local ipairs, pairs, select, table_concat
|
|
= ipairs, pairs, select, table.concat;
|
|
|
|
-- App locals
|
|
|
|
-- Module locals
|
|
app.contains = function(arr, value)
|
|
local count = #arr;
|
|
for i=1,count,1 do
|
|
if arr[i] == value then return true; end
|
|
end
|
|
end
|
|
app.containsAny = function(arr, arr2)
|
|
local count, otherCount = #arr, #arr2;
|
|
for i=1,count,1 do
|
|
local a = arr[i];
|
|
for j=1,otherCount,1 do
|
|
if a == arr2[j] then return true; end
|
|
end
|
|
end
|
|
end
|
|
app.containsValue = function(dict, value)
|
|
for _,value2 in pairs(dict) do
|
|
if value2 == value then return true; end
|
|
end
|
|
end
|
|
app.containsAnyKey = function(dict, arr)
|
|
local count = #arr
|
|
local k
|
|
for j=1,count do
|
|
k = arr[j]
|
|
if dict[k] ~= nil then return k end
|
|
end
|
|
end
|
|
app.indexOf = function(arr, value)
|
|
local count = #arr;
|
|
for i=1,count,1 do
|
|
if arr[i] == value then return i; end
|
|
end
|
|
end
|
|
-- Simply wipes the array portion of a table
|
|
-- NOTE: compared to base wipe() this is giga-fast
|
|
app.wipearray = function(t)
|
|
for i=1,#t do t[i] = nil end
|
|
end
|
|
-- Performs table.concat(tbl, sep, i, j) on the given table, but uses the specified field of table values if provided,
|
|
-- with a default fallback value if the field does not exist on the table entry
|
|
app.TableConcat = function(tbl, field, def, sep, i, j)
|
|
if tbl then
|
|
sep = sep or ""
|
|
if field then
|
|
local tblvals = {};
|
|
for _,val in ipairs(tbl) do
|
|
tblvals[#tblvals + 1] = val[field] or def
|
|
end
|
|
return table_concat(tblvals, sep, i, j);
|
|
else
|
|
return table_concat(tbl, sep, i, j);
|
|
end
|
|
end
|
|
return "";
|
|
end
|
|
-- Allows efficiently appending the content of multiple arrays (in sequence) onto the end of the provided array, or new empty array
|
|
app.ArrayAppend = function(a1, ...)
|
|
local arrs = select("#", ...);
|
|
if arrs > 0 then
|
|
a1 = a1 or {};
|
|
local a
|
|
for n=1,arrs do
|
|
a = select(n, ...);
|
|
if a then
|
|
for ai=1,#a do
|
|
a1[#a1 + 1] = a[ai];
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return a1;
|
|
end
|
|
-- Allows for returning a reversed array. Will do nothing for un-ordered tables or tables with a single entry
|
|
app.ReverseOrder = function(a)
|
|
if a[1] and a[2] then
|
|
local b, n, j = {}, #a, 1;
|
|
for i=n,1,-1 do
|
|
b[j] = a[i];
|
|
j = j + 1;
|
|
end
|
|
return b;
|
|
end
|
|
return a;
|
|
end
|