lua - LUA - 从嵌套表中获取值
问题描述
我有一个表,用于存储每个玩家的姓名、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
,因为它是一组玩家
local players = {
{
rpname = "john",
SteamID = "STEAM_0:0:1",
giftsFound = "4",
},
-- [...]
}
- 在 for 循环中重命名变量
- 在 Lua 中,常用的做法是
_
命名我们不会使用的变量。在这种情况下,k
我们不会使用密钥(最初名为 )。 - 由于它是一个玩家列表,每个条目都是一个玩家,因此将变量重命名为 是合乎逻辑
v
的player
。 - 另外,我改成
pairs()
这样ipairs()
是有充分理由的。我不会在这里介绍它,但在这里尽可能地解释它。经验法则:如果您的表是类似数组的,请使用ipairs()
; 否则,使用pairs()
.
for _, player in ipairs(players) do
-- [...]
end
k
对于嵌套的 for 循环,使用,v
和确实有意义pairs
,所以它会是这样的:
for k, v in pairs(player) do
print(k,v)
end
运行完整的部分会产生这样的结果:
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在葡萄牙语中是月亮的意思。
推荐阅读
- spring - 只能在 Spring Data Rest 中从一侧创建关联
- c++ - 使用赋值运算符检查和对齐 alloca() 的临时生命周期
- mysql - 如何将 ms-access NZ 转换为 IFNULL MySQL 或 MariaDB 函数?
- java - 布尔值无法返回正确值
- r - 漩涡不安装在 R 4.0.0
- java - 如何计算用户在数组中输入的字符数?
- java - 为 kafkatemplate 异步响应创建的最大异步线程数是多少
- javascript - 如何在控制台中打印请求正文?
- laravel - 尝试使用默认 laravel 身份验证页面登录时,Laravel 身份验证没有任何反应
- r - 指向嵌套列表元素的指针