Lua 将不同表格中的三个项目放在一行上

Lua 将不同表格中的三个项目放在一行上,lua,lua-table,Lua,Lua Table,所以我试图为一个游戏创建一个控制台命令列表,为了让它稍微好一点,我希望在一行上有三个命令 例如: Commands.afk.Args.Name = "!afk"; Commands.transfer.Args.Name = "!transfer"; Commands.jump.Args.Name = "!jump"; 将是: [!afk][!跳转][!转移] 我想我知道如何做到这一点(通过使用table.concat),但这段代码还需要验证我们转发的命令是否属于用户的访问组(例如,如果它们只是

所以我试图为一个游戏创建一个控制台命令列表,为了让它稍微好一点,我希望在一行上有三个命令

例如:

Commands.afk.Args.Name = "!afk";
Commands.transfer.Args.Name = "!transfer";
Commands.jump.Args.Name = "!jump";
将是:

[!afk][!跳转][!转移]

我想我知道如何做到这一点(通过使用
table.concat
),但这段代码还需要验证我们转发的命令是否属于用户的访问组(例如,如果它们只是来宾,我们不想向它们发送管理员命令)

命令。[commandname].Args.Access
返回一个介于1和6之间的数字,该数字对应于用户所属的成员级别。函数
Core:GetAccess(player)
(其中
player
是用户的唯一实体表)返回用户所属的成员组-命令。[commandname]。Args.Access和
Core:GetAccess(player)
需要匹配才能列出命令

我现在对格式不是太在意,我只是更关心我的特定用例是否实际可行。 如果可能,是否可以使用简单的
table.concat


我已经在互联网上找到了解决方案,但没有任何东西与我的特定用例相匹配。

table。concat
仅格式化类似数组的表中的纯字符串项

如果您需要做更复杂的工作,那么您需要自己编写一些代码

类似以下的方法可能会起作用:

local available_commands = {}
for cmd, tab in pairs(Commands) do
    if cmd.Args.Access == Core:GetAccess(player) then
        available_commands[#available_commands + 1] = "[!"..cmd.Args.Name.."]"
    end
end
local display_string = table.concat(available_commands)
print(display_string)

您可以迭代所有命令并将其设置在循环内

for i,v in pairs(Commands) do
    v.Args=v.Args or {};
    v.Args["name"]=i;
end

加载所有聊天命令后立即调用这个小循环。

不必为每个条目执行两个串联,您可以将它们简单地分配给数组并执行以下操作:
local display_string='[!'…table.concat(可用的_命令,'][!')…]'
这当然假定至少有一个命令,但这是一个简洁的快捷方式。