这是一个由函数getTargets();
打印的数组:
{
name = {
isPlayer = true,
isBlocking = false,
username = "yes"
}
}
当我players = getTargets();
将其置于变量中并想要访问第一个变量时,无论其名称如何,我都会遇到麻烦。我尝试过那些:
players.name.username --displays "yes"
players[0].username --displays nil
players[1].username --displays nil
我想访问此数组的第一个变量,无论它的值是什么。 我该怎么做?
答案 0 :(得分:1)
您的代码
local players = {
name = {
isPlayer = true,
isBlocking = false,
username = "yes"
}
}
相当于
local players = {}
players.name = {
isPlayer = true,
isBlocking = false,
username = "yes"
}
因此没有索引0或1,因此players[0]
和players[1]
为零。
players[0].username
和players[1].username
将导致索引零值的错误。
要获取未知密钥表的第一个元素,只需执行以下操作:
local key, value = next(someTable)
https://www.lua.org/manual/5.3/manual.html#pdf-next
当使用nil作为第二个参数调用时,next返回一个初始值 指数及其相关价值。
请记住:
甚至没有指定枚举索引的顺序 对于数字索引。
如果您想确保相应地更改数据结构。 但我不能在这里给你很多建议,因为我不知道这个的目的。
你可以有一个像(简单)这样的小功能:
local function addPlayerToList(playerList, playerLookUpTable, player)
table.insert(playerList, player)
playerLookUpTable[player.name] = #playerList
end
在Lua中阅读有关OOP的内容,以获得更好,更高级的想法。
答案 1 :(得分:0)
您可以尝试以这种方式获取密钥/名称:
local players = {
name = {
isPlayer = true,
isBlocking = false,
username = "yes"
}
}
local FirstPlayer
for k,v in pairs(players) do FirstPlayer=k break end
print(players[FirstPlayer].username)
然而,无法保证这始终是第一个。但也许这就是你的情况。
答案 2 :(得分:0)
你甚至不需要for循环:
n,t = pairs(players)
firstKey, firstValue = n(t)
正如lhf指出的那样,你甚至不需要配对,你只需要做
firstKey, firstValue = next(players)