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