You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中通过字符串路径遍历并获取表中值的最优方案

Lua表通过字符串路径取值的实现与优化

需求场景

给定类似作用域的字符串路径(如"SomePermissions/scope1/B"),从如下Lua表中获取对应权限值:

{
    ["SomePermissions"] = {
        ["scope1"] = {
            ["A"] = "special",
            ["B"] = true,
            ["C"] = false,
        }
    }
}

优化方向

针对现有方案,我们可以做以下两点优化:

  • 支持自定义路径分隔符(默认使用/)
  • 处理路径末尾带分隔符导致的空字符串节点问题

优化后的实现代码

function get_value_from_path(tbl, path, delimiter)
    delimiter = delimiter or "/"
    local current = tbl
    -- 分割路径,同时过滤空字符串(处理末尾分隔符的情况)
    for segment in string.gmatch(path, "[^" .. delimiter .. "]+") do
        if type(current) ~= "table" then
            return nil -- 中间节点不是表,无法继续查找
        end
        current = current[segment]
        if current == nil then
            return nil -- 节点不存在
        end
    end
    return current
end

-- 测试示例
local permissions = {
    ["SomePermissions"] = {
        ["scope1"] = {
            ["A"] = "special",
            ["B"] = true,
            ["C"] = false,
        }
    }
}

-- 正常路径测试
print(get_value_from_path(permissions, "SomePermissions/scope1/B")) -- 输出 true
-- 带末尾分隔符的路径测试
print(get_value_from_path(permissions, "SomePermissions/scope1/B/")) -- 输出 true
-- 自定义分隔符测试
print(get_value_from_path(permissions, "SomePermissions.scope1.A", ".")) -- 输出 special

代码说明

  • 使用string.gmatch配合[^分隔符]+的模式,自动过滤路径中的空字符串段,解决末尾分隔符引发的问题
  • 允许通过第三个参数指定自定义分隔符,提升函数通用性
  • 加入类型检查,避免中间节点非表结构时出现运行错误

内容的提问来源于stack exchange,提问作者karl-police

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:06:25