lines2.love/array.lua

47 lines
1008 B
Lua

array = {}
function array.find(arr, elem)
if type(elem) == 'function' then
for i,x in ipairs(arr) do
if elem(x) then
return i
end
end
else
for i,x in ipairs(arr) do
if x == elem then
return i
end
end
end
return nil
end
function array.any(arr, f)
for i,x in ipairs(arr) do
local result = f(x)
if result then
return result
end
end
return false
end
-- like ipairs, but support an index to start iterating from
-- idx is inclusive; the first call to the iterator will return idx
function array.each(arr, idx)
if idx then
if type(idx) ~= 'number' then
error("argument #2 to 'array.each' must be an integer if provided")
end
assert(idx >= 1, ("can't start iterating over an array from %d; the starting index needs to be at least 1"):format(idx))
end
idx = idx and idx-1 or 0
local iter = ipairs(arr)
return function()
local elem
idx, elem = iter(arr, idx)
return idx, elem
end
end