无法获得数组的第一项

时间:2017-06-26 09:11:00

标签: arrays lua

这是一个由函数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

我想访问此数组的第一个变量,无论它的值是什么。 我该怎么做?

3 个答案:

答案 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].usernameplayers[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)

https://repl.it/JBw1/1

正如lhf指出的那样,你甚至不需要配对,你只需要做

firstKey, firstValue = next(players)