Lua表循环的方法有哪些?

我正在开发一个回合制游戏,我的玩家表格具有以下结构

players = {
    ["p1"] = Player(),
    ["p2"] = Player(),
    ...
    ["pn"] = Player()
}

我想要做的是循环遍历表中的每个玩家(在每个玩家完成回合后),并回到第一个索引(在这种情况下,是"p1")

因此,当我运行代码时,它应该执行以下操作

function shift()
    -- 用于将玩家的轮次传递给其他玩家
    print(player.name)
end

shift() -- "p1"
shift() -- "p2"
...
shift() -- "pn"
shift() -- "p1"
-- 以此类推
点赞
用户4984564
用户4984564
本地索引
函数移位()
   如果没有索引则 索引 = 下一个(players) 结束
   打印(players[index].name)
   索引 = 下一个(players, 下一个)
结束

如果我正确理解了问题,那么这应该是你想要的 ?


编辑:

正如Egor Skriptunoff在他的评论中指出的那样,您还可以使函数返回键并使用“and”而不是“if”:

本地索引
函数移位()
   索引 = 下一个(players,索引)
   返回 索引 或者 下一个(players)
结束
2020-02-25 12:11:03
用户12230942
用户12230942

你的循环应该是这样的:

for k, player in pairs(players) do
     player:Player()
end

如果你想回调第一个玩家的函数,就接着这样写:

players[1]:Player()

希望这有所帮助!

编辑: 要使它是无限循环,只需将其放入“重复直到循环”中,它应该是这样的:

repeat
    <for loop across all players>
until <condition>
2020-02-26 06:32:23