Lua表取值方法:如何从嵌套表中按name提取prop值
在Lua中从嵌套Table通过name提取对应prop值的方法
嘿,我来帮你搞定这个Lua里的嵌套table取值问题~先看你给出的这个表结构:
items = { { ["name"] = 'item1', ["prop"] = 'prop1'}, { ["name"] = 'item2', ["prop"] = 'prop2'}, { ["name"] = 'item3', ["prop"] = 'prop3'} }
想要通过name字段拿到对应的prop值,有两种实用的思路,我给你拆解清楚:
1. 直接遍历查找(适合单次/少量查找)
这是最直观的方式,循环遍历整个items表,逐个对比子表的name字段,找到匹配项就返回对应的prop:
function getPropByName(items, targetName) for _, item in ipairs(items) do -- 对比当前子表的name与目标值 if item.name == targetName then return item.prop end end -- 没找到的话返回nil,也可以改成你需要的默认值 return nil end -- 调用示例 local targetProp = getPropByName(items, 'item2') print(targetProp) -- 输出: prop2
这里用ipairs是因为你的items是连续索引的数组型table,遍历效率更高;如果你的table不是连续索引的,换成pairs就行。
2. 构建映射表(适合多次重复查找)
如果需要频繁根据name查prop,每次遍历就有点浪费性能了,不如提前把name和prop的对应关系存到一个新table里,之后直接通过key取值:
-- 先构建name到prop的映射表 local namePropMap = {} for _, item in ipairs(items) do namePropMap[item.name] = item.prop end -- 后续查找直接通过key获取,速度超快 local prop1 = namePropMap['item1'] local prop3 = namePropMap['item3'] print(prop1) -- 输出: prop1 print(prop3) -- 输出: prop3
这种方法是用空间换时间,第一次构建好映射表后,后续查找都是O(1)的时间复杂度,特别适合需要多次查询的场景。
另外要注意:如果你的items里存在重复的name值,后面的项会覆盖前面的,要是有重名需求,你可以把prop改成数组,用来保存所有匹配的结果哦~
内容的提问来源于stack exchange,提问作者Voldermort
相关产品推荐
相关产品推荐

