有没有一种方法可以连续遍历lua表?

时间:2020-02-25 11:42:44

标签: lua next

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

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

我想做的是遍历表中的每个玩家(在每个玩家玩完回合之后)并回到第一个索引(在这种情况下为“ p1”)

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

function shift()
    -- do stuff to shift the player's turn
    print(player.name)
end

shift() -- "p1"
shift() -- "p2"
...
shift() -- "pn"
shift() -- "p1"
-- and so on

2 个答案:

答案 0 :(得分:1)

local index
function shift()
   if not index then index = next(players) end
   print(players[index].name)
   index = next(players, next)
end

如果我正确理解了这个问题,那应该做你想要的;)


编辑:

正如Egor Skriptunoff在其评论中指出的那样,您还可以让函数返回键并使用and代替if

local index
function shift()
   index = next(players,index)
   return index or next(players)
end

答案 1 :(得分:0)

您的循环应该类似于:

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

如果您想调出第一个播放器功能,则只需执行以下操作:

players[1]:Player()

希望这对您有所帮助!

编辑:要使其无休止,只需将其放入“重复直到循环”中,这样​​看起来就像:

repeat
    <for loop across all players>
until <condition>