blockgame/mods/bg_api/util_table.lua

68 lines
1.3 KiB
Lua

function blockgame.get_keys (tab)
local keyset = {}
local n = 0
for key, value in pairs(tab) do
n = n + 1
keyset[n] = key
end
return keyset
end
function blockgame.shallow_copy_table (tab)
local result = {}
for key, value in pairs(tab) do
result[key] = value
end
return result
end
function blockgame.naive_deep_copy (tab)
local result = {}
for key, value in pairs(tab) do
if type(value) == "table" then
result[key] = blockgame.naive_deep_copy(value)
else
result[key] = value
end
end
return result
end
function blockgame.shuffle (tab)
local keys = blockgame.get_keys(tab)
local result = {}
while #keys > 0 do
local index = math.random(1, #keys)
local key = table.remove(keys, index)
table.insert(result, tab[key])
end
return result
end
function blockgame.any (tab, check)
for key, value in pairs(tab) do
if check(value, key, tab) then return true end
end
return false
end
function blockgame.every (tab, check)
for key, value in pairs(tab) do
if not check(value, key, tab) then return false end
end
return true
end
function blockgame.underride (tab, template)
local tab = tab or {}
local result = blockgame.naive_deep_copy(template)
for key, value in pairs(tab) do
if type(value) == "table" then
result[key] = blockgame.underride(value, template[key] or {})
else
result[key] = value
end
end
return result
end