【问题标题】:Is there a way to iterate through a lua table continuously?有没有办法连续遍历一个lua表?
【发布时间】:2020-06-09 03:23:48
【问题描述】:

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

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

【问题讨论】:

    标签: lua next


    【解决方案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
    

    【讨论】:

    • next 的第二个参数是关键,所以必须是 index = next(players, index)
    • local index; function shift() index = next(players, index) or next(players); return index; end
    【解决方案2】:

    你的循环应该是这样的:

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

    如果您想调用第一个播放器功能,那么只需按照以下说明:

    players[1]:Player()
    

    希望这有帮助!

    编辑:为了让它无止境,只需将它放在“重复直到循环”中,这样​​它看起来就像:

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

    【讨论】:

    • 我已经在使用这样的循环来制作我的播放器列表。我刚刚给出了它的结构。我还想访问每个播放器对象,直到列表结束,然后返回第一个元素并继续该过程。我想我已经告诉了那件事。在我的问题中很清楚
    • 您在问题中没有提到“无尽”。请在那边说清楚。
    • 我认为标题说的类似;)
    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 2010-11-20
    • 2015-12-03
    • 2016-01-16
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多