【问题标题】:Lua how can i get all keys in a TableLua我怎样才能得到一个表中的所有键
【发布时间】:2021-06-22 14:31:50
【问题描述】:

我目前正在学习 LUA 并尝试为游戏制作脚本。 到目前为止一切正常,但我遇到了一个问题,我不知道该怎么做。

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

DATA["1234"] = {"Admin", 0, 0}
DATA["2793"] = {"Supporter", 0, 0}
DATA["1599"] = {"VIP", 0, 0}
DATA["6473"] = {"User", 0, 0}
  • DATA = 表名
  • ["1234"] = 玩家 ID
  • {"",0,0} = 每个数据的 3 个值

我想要的是能提供我拥有的 DATA 数量的东西。 在这个例子中,我有 4 个数据。 当一个新玩家到来时,我有 5 个数据,但我如何获得我拥有的“键”或“数据”的数量?

我需要这个用于播放器保存功能。

编辑:

我忘记了一些重要的事情,对不起..

我也需要键名,它非常重要!

这很好用:

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

但是我怎样才能得到所有 DATA 的键名呢?

顺便说一句:playerId 是 SteamID

类似:

for k, v in pairs(DATA[playerId]) do
    --Code here
end
-- Results:
1234
2793
1599
6473

【问题讨论】:

标签: lua


【解决方案1】:

下面的代码打印DATA中的键:

for k, v in pairs(DATA) do
    print(k)
end

【讨论】:

    【解决方案2】:

    对于像您这样的表格,我的建议是安装可以完全处理您的表格的元方法。
    我也将它用于表,例如 _G_ENV,其中不存在编号键序列。
    #
    示例

    Lua 5.4.0  Copyright (C) 1994-2020 Lua.org, PUC-Rio
    > print(code.len)
    -- len() for tables having named keys or keys not in sequence
    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
    -- Now the dump() function that show all keys/values
    > 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
    -- cuted off here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2015-12-15
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      相关资源
      最近更新 更多