tibia-client/modules/corelib/table.lua

110 lines
1.9 KiB
Lua
Raw Normal View History

2012-06-26 00:13:30 +02:00
-- @docclass table
function table.dump(t, depth)
if not depth then depth = 0 end
for k,v in pairs(t) do
2011-12-07 01:31:55 +01:00
str = (' '):rep(depth * 2) .. k .. ': '
if type(v) ~= "table" then
2011-11-17 21:40:31 +01:00
print(str .. tostring(v))
else
print(str)
table.dump(v, depth+1)
end
end
end
function table.copy(t)
local res = {}
for k,v in pairs(t) do
res[k] = v
end
return res
end
function table.recursivecopy(t)
local res = {}
for k,v in pairs(t) do
if type(v) == "table" then
res[k] = table.recursivecopy(v)
else
res[k] = v
end
end
return res
end
2012-01-05 02:55:07 +01:00
function table.selectivecopy(t, keys)
local res = { }
for i,v in ipairs(keys) do
res[v] = t[v]
end
return res
end
function table.merge(t, src)
for k,v in pairs(src) do
t[k] = v
end
end
2012-01-05 02:55:07 +01:00
function table.find(t, value)
for k,v in pairs(t) do
if v == value then return k end
end
end
function table.contains(t, value)
return table.find(t, value) ~= nil
end
function table.findKey(t, key)
if t and type(t) == 'table' then
for k,v in pairs(t) do
if k == key then return k end
end
end
end
function table.hasKey(t, key)
return table.findKey(t, key) ~= nil
end
2012-01-05 02:55:07 +01:00
function table.removevalue(t, value)
for k,v in pairs(t) do
if v == value then
2012-01-07 21:00:07 +01:00
table.remove(t, k)
break
2012-01-05 02:55:07 +01:00
end
end
2012-01-07 21:00:07 +01:00
end
function table.compare(t, other)
if #t ~= #other then return false end
for k,v in pairs(t) do
if v ~= other[k] then return false end
2012-01-05 02:55:07 +01:00
end
2012-01-07 21:00:07 +01:00
return true
2012-01-05 02:55:07 +01:00
end
function table.empty(t)
if t and type(t) == 'table' then
return next(t) == nil
end
return true
end
function table.toString(t)
local maxn = #t
local str = ""
for k,v in pairs(t) do
if k == maxn and k ~= 1 then
str = str .. " and " .. v
elseif maxn > 1 and k ~= 1 then
str = str .. ", " .. v
else
str = str .. " " .. v
end
end
return str
end