【问题标题】:LUA - Getting values from nested tableLUA - 从嵌套表中获取值
【发布时间】:2020-05-05 07:32:06
【问题描述】:

我有一个表格,用于存储每个玩家的姓名、id 和另一个值

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

表格正在通过 net.ReadTable() 从服务器发送到客户端

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

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

有人可以帮帮我吗?

【问题讨论】:

  • 您能否显示您发布的表格的哪一部分分配给了值tableData?如果您发布的表格名为tableData,您可以使用以下方法获取第一个条目的 SteamID:tableData[1].SteamID,至于 for 循环,如果没有看到输出和实际表格,我无法调试它。您是否使用自定义 API 或库?我的第一个想法是你得到每个值的第一个字母的原因是你将一个字符串传递给对,但从我的测试中我确定不可能将字符串传递给对(这意味着问题会是别的)。

标签: lua lua-table


【解决方案1】:

如果我理解正确,您在第一个代码块中编写的示例表将是您在第二个代码块中所称的tableData,对吧?所以,你想要的是:

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

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

  • 重命名您的桌子players,因为它是一组玩家
local players = {
   {
      rpname = "john",
      SteamID = "STEAM_0:0:1",
      giftsFound = "4",
   },
   -- [...]
}
  • 在 for 循环中重命名变量
  • 在 Lua 中,使用_ 来命名我们不打算使用的变量是很常见的做法。在这种情况下,我们不会使用密钥(最初名为 k)。
  • 由于是玩家列表,每一个条目都是一个玩家,所以将变量v重命名为player是合乎逻辑的。
  • 另外,我将pairs() 更改为ipairs(),这是有充分理由的。我不会在这里介绍它,但here 已尽我所能解释。经验法则:如果您的表是类似数组的,请使用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

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

如果您想访问表格中的特定字段,而不是遍历整个内容,您可以这样做:

-- 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 在葡萄牙语中是月亮的意思。

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 2015-03-26
    • 2017-05-14
    • 2014-01-23
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多