LUA - 从嵌套中获取值 table

LUA - Getting values from nested table

我有一个 table 用于存储每个玩家的名字、id 和另一个值

{
                    {
                    rpname  =       "name",
                    SteamID =       "STEAM_0:0:",
                    giftsFound      =       "1",
                            },

table 正在通过 net.ReadTable()

从服务器发送到客户端

我希望能够单独选择每个值,但是当我在下面尝试以下操作时,只有 returns 每个值的第一个字母而不是第一个值

for k, v in pairs(tableData) do
        for k, v in pairs(v) do
             print(v[1]
        end
end

有人能帮帮我吗?

如果我没理解错的话,您在第一段代码中编写的示例 table 就是您在第二段中所谓的 tableData ,对吗?所以,你想要的是:

  1. 一组玩家
  2. 此数组中的每个条目都是 table
  3. 获取每个玩家每个字段的方法

通过一些调整,我们可以使您的代码更具可读性,并据此进行更正。首先,我会重命名一些东西:

  • 重命名您的 table players,因为它是一组玩家
local players = {
   {
      rpname = "john",
      SteamID = "STEAM_0:0:1",
      giftsFound = "4",
   },
   -- [...]
}
  • 重命名 for 循环中的变量
  • 在Lua中,通常使用_来命名我们不打算使用的变量。在这种情况下,密钥(最初名为 k)不是我们要使用的东西。
  • 由于是球员列表,每一项都是一名球员,所以顺理成章将变量v重命名为player
  • 此外,我将 pairs() 更改为 ipairs(),这是有充分理由的。我不会在这里介绍它,但是 我会尽可能地解释它。经验法则:如果你的 table 是类似数组的,使用 ipairs();否则,使用 pairs().
for _, player in ipairs(players) do
   -- [...]
end
  • 对于嵌套的 for 循环,使用 kvpairs 确实有意义,所以它会像这样:
for k, v in pairs(player) do
   print(k,v)
end

运行 整篇文章会产生这个:

rpname  john
giftsFound      4
SteamID STEAM_0:0:1

我想它可以解决您的问题。代码中的真正错误是您尝试访问嵌套 table 字段的方式,并且可以说是在同一范围内使用您已经使用过的名称(kv)命名变量,在最好的情况下,这是误导。

如果您想访问 table 中的特定字段,您可以这样做:

-- To print every player's name
for _, player in ipairs(players) do
   local name = player.rpname
   print(name)
end

甚至:

-- To get the first player's (in the array) name
local name = players[1].rpname

最后一件事:"Lua" 不是首字母缩写词,您不需要全部使用大写字母。 Lua 是在巴西创建的,我们在这里说葡萄牙语。 Lua 在葡萄牙语中是月亮的意思。