Lua - 反向迭代器
当我们需要以反向顺序打印一个序列/表时,有两种选择——
Numeric For——使用反向的 numeric for 来以反向顺序打印表。
Reverse Iterator 和 Generic For——创建一个反向迭代器,并与 generic for 一起使用。
让我们逐一探讨每种选择。
示例 - 使用 Numeric For 的反向迭代器
考虑以下 for 循环。
main.lua
local array = {'a', 'b', 'c', 'd', 'e', 'f'}
for i = #array, 1, -1 do
value = array[i]
print(i, value)
end
输出
当上述代码构建并执行时,会产生以下结果——
6 f 5 e 4 d 3 c 2 b 1 a
示例 - 使用 Generic For 的反向迭代器
让我们首先创建一个反向迭代器
-- 创建一个反向迭代器
function reverseIterator(array)
-- 创建一个闭包
local function reverse(array,i)
-- 递减索引
i = i - 1
-- 如果 i 不为 0
if i ~= 0 then
return i, array[i]
end
end
-- 调用闭包
return reverse, array, #array+1
end
使用 generic for 调用反向迭代器
-- 创建一个数组
local array = {'a', 'b', 'c', 'd', 'e', 'f'}
-- 使用 reverseIterator 以反向顺序获取数组
for index, value in reverseIterator(array) do
print(index, value)
end
使用 Generic For 与反向迭代器的完整示例
main.lua
-- 创建一个反向迭代器
function reverseIterator(array)
-- 创建一个闭包
local function reverse(array,i)
-- 递减索引
i = i - 1
-- 如果 i 不为 0
if i ~= 0 then
return i, array[i]
end
end
-- 调用闭包
return reverse, array, #array+1
end
-- 创建一个数组
local array = {'a', 'b', 'c', 'd', 'e', 'f'}
-- 使用 reverseIterator 以反向顺序获取数组
for index, value in reverseIterator(array) do
print(index, value)
end
输出
当上述代码构建并执行时,会产生以下结果——
6 f 5 e 4 d 3 c 2 b 1 a