From 040c9dfefcbde65bd2cba61ff40dfc7894e1ee28 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 8 Jul 2024 16:02:33 -0700 Subject: [PATCH] new primitive for iterating partially over an array --- array.lua | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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