minecraft-cc-tools/libs/utils.lua
2024-05-24 01:08:03 +02:00

109 lines
1.5 KiB
Lua

local utils = {}
utils.sizeof = function(t)
if not t then
return 0
end
local size = 0
for k,v in pairs(t) do
size = size + 1
end
return size
end
utils.shallowDiff = function(a, b)
local counters = {}
for k,v in pairs(a) do
local currentCounter = counters[v] or 0
counters[v] = currentCounter + 1
end
for k,v in pairs(b) do
if counters[v] then
counters[v] = counters[v] - 1
end
end
local ret = {}
local n = 0
for k,v in pairs(a) do
if counters[v] and counters[v] > 0 then
counters[v] = counters[v] - 1
n = n + 1
ret[n] = v
end
end
return ret
end
utils.shallowClone = function(t)
if not t then
return t
end
local res = {}
for k,v in pairs(t) do
res[k] = v
end
return res
end
utils.merge = function(a, b)
local res = {}
for k, v in pairs(a) do
res[k] = v
end
for k, v in pairs(b) do
res[k] = v
end
return res
end
utils.concat = function(a, b)
local res = {}
local i = 0
for _, v in pairs(a) do
res[i] = v
i = i + 1
end
for _, v in pairs(b) do
res[i] = v
i = i + 1
end
return res
end
utils.find = function(t, predicate)
for k,v in pairs(t) do
if predicate(v, k) then
return v, k
end
end
end
-- repeat n times the given element x in a new table
utils.rep = function(x, n)
if n < 1 then
return {}
end
local result = {}
for i=1, n, 1 do
result[i] = x
end
return result
end
return utils