有没有办法连续迭代 lua table ?
Is there a way to iterate through a lua table continuously?
我正在开发一款回合制游戏,我有一个table以下结构的玩家
players = {
["p1"] = Player(),
["p2"] = Player(),
...
["pn"] = Player()
}
我想做的是遍历 table 中的每个玩家(在每个玩家玩完他的回合后)并返回到第一个索引(在本例中为 "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
local index
function shift()
if not index then index = next(players) end
print(players[index].name)
index = next(players, next)
end
如果我对问题的理解正确的话,那应该可以满足你的要求 ;)
编辑:
正如 Egor Skriptunoff 在他的评论中指出的那样,您还可以使用 return 键功能并使用 and
而不是 if
:
local index
function shift()
index = next(players,index)
return index or next(players)
end
你的循环应该是这样的:
for k, player in pairs(players) do
player:Player()
end
如果你想回忆第一个玩家的功能,那么只要跟着这个:
players[1]:Player()
希望对您有所帮助!
编辑:要让它无穷无尽,只需将它放在 'repeat until loop' 中,这样它看起来像:
repeat
<for loop across all players>
until <condition>
我正在开发一款回合制游戏,我有一个table以下结构的玩家
players = {
["p1"] = Player(),
["p2"] = Player(),
...
["pn"] = Player()
}
我想做的是遍历 table 中的每个玩家(在每个玩家玩完他的回合后)并返回到第一个索引(在本例中为 "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
local index
function shift()
if not index then index = next(players) end
print(players[index].name)
index = next(players, next)
end
如果我对问题的理解正确的话,那应该可以满足你的要求 ;)
编辑:
正如 Egor Skriptunoff 在他的评论中指出的那样,您还可以使用 return 键功能并使用 and
而不是 if
:
local index
function shift()
index = next(players,index)
return index or next(players)
end
你的循环应该是这样的:
for k, player in pairs(players) do
player:Player()
end
如果你想回忆第一个玩家的功能,那么只要跟着这个:
players[1]:Player()
希望对您有所帮助!
编辑:要让它无穷无尽,只需将它放在 'repeat until loop' 中,这样它看起来像:
repeat
<for loop across all players>
until <condition>