diff --git a/array.lua b/array.lua index 128cc34..28280b3 100644 --- a/array.lua +++ b/array.lua @@ -26,3 +26,21 @@ function array.any(arr, f) 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