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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:00