60 lines
1.1 KiB
Lua
60 lines
1.1 KiB
Lua
local qtable = {}
|
|
|
|
function qtable.map(t, f)
|
|
local nt = {}
|
|
for k,v in pairs(t) do
|
|
nt[k] = f(v)
|
|
end
|
|
return nt
|
|
end
|
|
|
|
function qtable.filter(t, f, dict)
|
|
local nt = {}
|
|
for k,v in pairs(t) do
|
|
if not f(v) then goto continue end
|
|
if dict then
|
|
nt[k] = v
|
|
else
|
|
table.insert(nt, v)
|
|
end
|
|
::continue::
|
|
end
|
|
return nt
|
|
end
|
|
|
|
-- This is taken from http://lua-users.org/wiki/SortedIteration
|
|
-- This version is stripped of comments and empty lines + some stuff is renamed
|
|
|
|
local function __gen_oindex(t)
|
|
local oindex = {}
|
|
for key in pairs(t) do
|
|
table.insert(oindex, key)
|
|
end
|
|
table.sort(oindex)
|
|
return oindex
|
|
end
|
|
|
|
function qtable.onext(t, state)
|
|
local key = nil
|
|
if state == nil then
|
|
t.__oindex = __gen_oindex(t)
|
|
key = t.__oindex[1]
|
|
else
|
|
for i = 1,#t.__oindex do
|
|
if t.__oindex[i] == state then
|
|
key = t.__oindex[i+1]
|
|
end
|
|
end
|
|
end
|
|
if key then
|
|
return key, t[key]
|
|
end
|
|
t.__oindex = nil
|
|
end
|
|
|
|
function qtable.opairs(t)
|
|
return qtable.onext, t, nil
|
|
end
|
|
|
|
return qtable
|