Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LUA-从嵌套表中获取值_Lua_Lua Table - Fatal编程技术网

LUA-从嵌套表中获取值

LUA-从嵌套表中获取值,lua,lua-table,Lua,Lua Table,我有一个表,将用于存储每个球员的名字,id和另一个值 { { rpname = "name", SteamID = "STEAM_0:0:", giftsFound = "1", }, 正在通过net.ReadTable()将表从服务

我有一个表,将用于存储每个球员的名字,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
,对吗?所以,你想要的是:

  • 一队球员
  • 此数组中的每个条目都是一个表
  • 一种获得每个球员每个场地的方法
  • 通过一些调整,我们可以使您的代码更具可读性,并由此纠正它。首先,我想重新命名一些东西:

    • 重命名您的表
      players
      ,因为它是一个播放器数组
    • 重命名for循环中的变量
    • 在Lua中,通常使用
      \uu
      来命名我们不打算使用的变量。在本例中,密钥(最初名为
      k
      )不是我们将使用的
    • 由于它是一个玩家列表,每个条目都是一个玩家,因此将变量
      v
      重命名为
      player
      是合乎逻辑的
    • 另外,我将pairs()改为ipairs(),这是有充分理由的。我在这里不赘述,但我会尽可能详细地解释。经验法则:如果您的表类似于数组,请使用
      ipairs()
      ;否则,请使用
      pairs()
    • 对于嵌套的For循环,使用
      k
      v
      是有意义的,因此应该是这样的:
    运行整块将产生以下结果:

    rpname  john
    giftsFound      4
    SteamID STEAM_0:0:1
    
    我想它解决了你的问题。代码中真正的错误是您试图访问嵌套表字段的方式,并且可以说,使用您在同一范围内已经使用过的名称(
    k
    v
    )命名变量,这在最好的情况下是误导性的

    如果要访问表中的特定字段,而不是遍历整个过程,可以执行以下操作:

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

    您能显示您发布的表的哪个部分被分配给了值
    tableData
    ?如果您发布的表名为
    tableData
    ,则可以使用以下命令获取第一个条目的SteamID:
    tableData[1]。SteamID
    ,对于for循环,我无法在不查看输出和实际表的情况下调试它。您正在使用自定义API或库吗?我的第一个想法是,获取每个值的第一个字母的原因是将字符串传递给pairs,但从我的测试中,我确定不可能将字符串传递给pairs(这意味着问题将是其他问题)。
    rpname  john
    giftsFound      4
    SteamID STEAM_0:0:1
    
    -- 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