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
相关产品推荐
相关产品推荐

