【问题标题】:How to iterate Lua table from end?如何从末端迭代Lua表?
【发布时间】:2017-05-11 23:56:30
【问题描述】:

如何从末尾迭代一个简单的 Lua 表,即 a sequence

想要的行为示例:

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

应该输出

3: c
2: b
1: a

这里reversedipairs怎么实现?

【问题讨论】:

  • 您的迭代比这更通用。意思是,它可以在没有太多限制的情况下在桌子上工作。它只是反向迭代表的"sequence"。如果表没有序列,则行为未定义。
  • @TomBlodget 谢谢,我编辑了这个问题。我知道它必须有一个正式名称,但我在任何地方都没有找到它。

标签: lua iterator reverse lua-table


【解决方案1】:

感谢@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】:

您也可以使用带有反向索引的标准 for 语句:

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

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2015-05-31
    • 2011-12-14
    相关资源
    最近更新 更多