Lua 游戏脚本中如何获取Table所有键名并统计DATA表的条目总数
Lua脚本开发问题:自定义哈希表的条目统计与全量键名提取
自定义存档表结构
玩家存档表DATA采用SteamID字符串作为顶层键,每个键对应的值是存储3项玩家配置的子表,示例结构如下:
DATA["1234"] = {"Admin", 0, 0} DATA["2793"] = {"Supporter", 0, 0} DATA["1599"] = {"VIP", 0, 0} DATA["6473"] = {"User", 0, 0}
已实现的可用功能
动态条目统计函数可以正常运行,适配这类非连续索引哈希表的长度统计需求,可直接用于存档流程的数量校验:
function tableLength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
说明:Lua内置的
#长度运算符仅对连续索引的数组生效,上述通过pairs遍历计数的实现,是这类以字符串为键的哈希表统计长度的标准正确写法。
当前存在的逻辑问题
尝试遍历获取全量玩家SteamID列表的代码无法输出预期结果,当前编写的代码为:
for k, v in pairs(DATA[playerId]) do --Code here end
预期需要获取的全量顶层键(即所有玩家SteamID)列表为:
- 1234
- 2793
- 1599
- 6473
问题排查与正确实现
错误根源
代码的遍历对象错误:DATA[playerId]表达式取到的是单个玩家对应的配置子表,遍历该对象得到的是子表内部的数值索引(对应权限标识、数值1、数值2的位置),而非顶层DATA表存储的SteamID键值。
获取全量SteamID列表的正确逻辑
直接遍历顶层DATA表,将遍历得到的键值收集到独立列表即可,示例代码:
-- 收集目标表所有顶层键的通用函数 function collectAllKeys(targetTable) local keyList = {} for key, _ in pairs(targetTable) do table.insert(keyList, key) end return keyList end -- 调用示例:获取所有玩家SteamID local allPlayerSteamIds = collectAllKeys(DATA) -- 遍历输出收集到的ID列表 for _, steamId in ipairs(allPlayerSteamIds) do print(steamId) end
内容的提问来源于stack exchange,提问作者Aquedus
相关产品推荐
相关产品推荐

