如何从Lua表的末尾开始迭代?

21

如何迭代一个简单的Lua表格,它是一个序列,并从结尾开始迭代?

所需行为示例:

local mytable = {'a', 'b', 'c'}
for i, value in reversedipairs(mytable) do
    print(i .. ": " .. value)
end

应该输出

3: c
2: b
1: a

如何实现reversedipairs


1
你的迭代比那个更通用。也就是说,它可以在没有太多限制的情况下对表进行操作。它只是反向迭代表的"sequence"。如果一个表没有序列,那么行为是未定义的。 - Tom Blodget
@TomBlodget 谢谢,我编辑了问题。我知道这一定有一个官方名称,但我在任何地方都没找到它。 - Franz Wexler
2个回答

37

感谢@Piglet提供有用的链接。

local function reversedipairsiter(t, i)
    i = i - 1
    if i ~= 0 then
        return i, t[i]
    end
end
function reversedipairs(t)
    return reversedipairsiter, t, #t + 1
end

实际上,我发现一种更简单的方法可能是

local mytable = {'a', 'b', 'c'}
for i = #mytable, 1, -1 do
    value = mytable[i]
    print(i .. ": " .. value)
end

2
做得好,你自己编码了。不知道为什么没有人写下来并解释一下。这是一个相当简单的任务。当它允许时,请确保将其标记为正确。 - warspyking

10

除此之外,您还可以使用带有反向索引的标准 for 语句:

for i=1, #mytable do
   print(mytable[#mytable + 1 - i])
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接