mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 21:01:28 +00:00
165 lines
2.3 KiB
Lua
165 lines
2.3 KiB
Lua
ESX.Table = {}
|
|
|
|
-- nil proof alternative to #table
|
|
function ESX.Table.SizeOf(t)
|
|
local count = 0
|
|
|
|
for _,_ in pairs(t) do
|
|
count = count + 1
|
|
end
|
|
|
|
return count
|
|
end
|
|
|
|
function ESX.Table.Set(t)
|
|
local set = {}
|
|
for k,v in ipairs(t) do set[v] = true end
|
|
return set
|
|
end
|
|
|
|
function ESX.Table.IndexOf(t, value)
|
|
for i=1, #t, 1 do
|
|
if t[i] == value then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.LastIndexOf(t, value)
|
|
for i=#t, 1, -1 do
|
|
if t[i] == value then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.Find(t, cb)
|
|
for i=1, #t, 1 do
|
|
if cb(t[i]) then
|
|
return t[i]
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function ESX.Table.FindIndex(t, cb)
|
|
for i=1, #t, 1 do
|
|
if cb(t[i]) then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end
|
|
|
|
function ESX.Table.Filter(t, cb)
|
|
local newTable = {}
|
|
|
|
for i=1, #t, 1 do
|
|
if cb(t[i]) then
|
|
table.insert(newTable, t[i])
|
|
end
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Map(t, cb)
|
|
local newTable = {}
|
|
|
|
for i=1, #t, 1 do
|
|
newTable[i] = cb(t[i], i)
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Reverse(t)
|
|
local newTable = {}
|
|
|
|
for i=#t, 1, -1 do
|
|
table.insert(newTable, t[i])
|
|
end
|
|
|
|
return newTable
|
|
end
|
|
|
|
function ESX.Table.Clone(t)
|
|
if type(t) ~= 'table' then return t end
|
|
|
|
local meta = getmetatable(t)
|
|
local target = {}
|
|
|
|
for k,v in pairs(t) do
|
|
if type(v) == 'table' then
|
|
target[k] = ESX.Table.Clone(v)
|
|
else
|
|
target[k] = v
|
|
end
|
|
end
|
|
|
|
setmetatable(target, meta)
|
|
|
|
return target
|
|
end
|
|
|
|
function ESX.Table.Concat(t1, t2)
|
|
local t3 = ESX.Table.Clone(t1)
|
|
|
|
for i=1, #t2, 1 do
|
|
table.insert(t3, t2[i])
|
|
end
|
|
|
|
return t3
|
|
end
|
|
|
|
function ESX.Table.Join(t, sep)
|
|
local sep = sep or ','
|
|
local str = ''
|
|
|
|
for i=1, #t, 1 do
|
|
if i > 1 then
|
|
str = str .. sep
|
|
end
|
|
|
|
str = str .. t[i]
|
|
end
|
|
|
|
return str
|
|
end
|
|
|
|
-- Credit: https://stackoverflow.com/a/15706820
|
|
-- Description: sort function for pairs
|
|
function ESX.Table.Sort(t, order)
|
|
-- collect the keys
|
|
local keys = {}
|
|
|
|
for k,_ in pairs(t) do
|
|
keys[#keys + 1] = k
|
|
end
|
|
|
|
-- if order function given, sort by it by passing the table and keys a, b,
|
|
-- otherwise just sort the keys
|
|
if order then
|
|
table.sort(keys, function(a,b)
|
|
return order(t, a, b)
|
|
end)
|
|
else
|
|
table.sort(keys)
|
|
end
|
|
|
|
-- return the iterator function
|
|
local i = 0
|
|
|
|
return function()
|
|
i = i + 1
|
|
if keys[i] then
|
|
return keys[i], t[keys[i]]
|
|
end
|
|
end
|
|
end |