Lua怎么实现反向迭代器?

文章导读
Previous Quiz Next 当我们需要以反向顺序打印一个序列/表时,有两种选择——
📋 目录
  1. 示例 - 使用 Numeric For 的反向迭代器
  2. 示例 - 使用 Generic For 的反向迭代器
  3. 使用 Generic For 与反向迭代器的完整示例
A A

Lua - 反向迭代器



Previous
Quiz
Next

当我们需要以反向顺序打印一个序列/表时,有两种选择——

  • 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