Lua如何获取表中的所有键

我目前正在学习LUA并尝试为游戏编写脚本。 到目前为止一切正常,但我卡在了一个问题上,我无法想出如何解决。

例如,我有一个包含以下内容的LUA文件:

DATA["1234"] = {"管理员", 0, 0}
DATA["2793"] = {"支持者", 0, 0}
DATA["1599"] = {"VIP", 0, 0}
DATA["6473"] = {"用户", 0, 0}
  • DATA = 表名
  • ["1234"] = 玩家ID
  • {"",0,0} = 每个DATA的3个值

我想要的是给我我拥有的DATAs数量。 在这个例子中,我有4个DATAs。 当一个新的玩家来到时,我有5个DATAs,但是我如何获得我拥有的"键"或"DATAs"的数量?

我需要这个玩家保存功能。

编辑:

我忘了重要的事情,抱歉..

我也需要Keynames,这非常重要!

这个可以正常工作:

function tableLength(T)
    local count = 0
    for _ in pairs(T) do count = count + 1 end
    return count
end

但我如何获取所有数据的键名?

顺便说一句:playerId是SteamID

类似于这样:

for k, v in pairs(DATA[playerId]) do
    --在这里放置代码
end
--结果:
1234
2793
1599
6473
点赞
用户11740758
用户11740758

我的建议是为像你的表格一样的表格安装与其完全相符的元方法。

我也在使用 _G_ENV 等没有数字键序列的表,这样就很容易用 # 计算键值数量了。

例如:

Lua 5.4.0  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> print(code.len)
-- len() 用于拥有命名键或非序列键的表格。
return function(len)
local incr=0
for _ in pairs(len) do
  incr=incr+1
end
return incr
end
> #_G
0
> setmetatable(_G,{__len=load(code.len)(),__index={}})
table: 0x56616700
> #_G
36
-- 现在是展示所有键值的 `dump()` 函数
> print(code.dump)
-- dump(table)
return function(...)
local args={...}
local test,dump=pcall(assert,args[1])
if test then
for key,value in pairs(dump) do
  io.write(string.format("%s=%s\n",key,value))
end
  return true
else
  return test,dump
end
end
> getmetatable(_G).__index.dump=load(code.dump)()
> _G:dump()
assert=function: 0x565aa300
error=function: 0x565a9be0
ipairs=function: 0x565a9a10
tostring=function: 0x565a9300
next=function: 0x565a9a60
select=function: 0x565a9340
package=table: 0x565d2ee0
os=table: 0x565d3e70
rawlen=function: 0x565a97c0
xpcall=function: 0x565a9e30
print=function: 0x565a9920
string=table: 0x565d45a0
pcall=function: 0x565aa3e0
coroutine=table: 0x565d30e0
arg=table: 0x565d6310
rawset=function: 0x565a9710
dofile=function: 0x565aa280
io=table: 0x565d3750
-- 后面省略
2021-03-25 19:23:16
用户107090
用户107090

以下代码打印DATA中的键:

for k, v in pairs(DATA) do
    print(k)
end
2021-03-25 19:31:14