Skip to content

Instantly share code, notes, and snippets.

@Hadaward
Last active May 4, 2023 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hadaward/da9ef08437e614a3d6a134bf0b48152f to your computer and use it in GitHub Desktop.
Save Hadaward/da9ef08437e614a3d6a134bf0b48152f to your computer and use it in GitHub Desktop.
This gist contains useful functions for lua tables inspired directly from the JavaScript documentation.
function table.every(self, predicate)
for key, value in next, self do
if not predicate(value, key) then
return false
end
end
return true
end
function table.map(self, predicate, ordered)
local t = {}
for k, v in next, self do
local value = predicate(v, k)
if not ordered then
t[k] = value
else
table.insert(t, value)
end
end
return t
end
function table.filter(self, predicate, ordered)
local t = {}
for key, value in next, self do
if predicate(value, key) then
if not ordered then
t[key] = value
else
table.insert(t, value)
end
end
end
return t
end
function table.extend(self, t, ordered)
if ordered then
return { table.unpack(self), table.unpack(t) }
else
local newT = {}
for k, v in next, self do
newT[k] = v
end
for k, v in next, t do
newT[k] = v
end
return newT
end
end
function table.find(self, predicate)
for key, value in next, self do
if predicate(value, key) then
return value
end
end
return nil
end
function table.contains(self, value)
for _, v in next, self do
if v == value then
return true
end
end
return false
end
function table.hasKey(self, key)
return self[key] ~= nil
end
function table.length(self)
local mt = getmetatable(self)
if mt ~= nil and mt.__len ~= nil then
return mt:__len()
end
local count = 0
for _, _ in next, self do
count = count + 1
end
return count
end
function table.freeze(self)
return setmetatable({}, {
__index = function(_, key)
return self[key]
end,
__newindex = function(_, key, value)
error(("Cannot set property '%s' to '%s', table is frozen"):format(key, tostring(value)))
end,
__len = function()
return table.length(self)
end
})
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment