Lua中如何根据输入键名从两个同类型表中选出对应的目标表
Lua 根据输入键名匹配对应目标表的实现方法
方案1:查找表实现(推荐,易扩展)
- 核心逻辑:预先构造键名到目标表、表名的映射关系,输入后直接索引匹配,性能更高,后续新增匹配表仅需更新映射表即可
-- 已知表定义 A = { name1 = {} } B = { name2 = {} } -- 构造查找映射 local lookup_map = { name1 = { target = A, table_name = "A" }, name2 = { target = B, table_name = "B" } } -- 替换为实际输入值 local input_key = "name1" local matched = lookup_map[input_key] if matched then -- 输出匹配的表名 print("匹配到的表名称:" .. matched.table_name) -- 可直接操作目标表 local target_table = matched.target else print("未匹配到符合要求的表") end
方案2:分支判断实现(适合少量表的临时场景)
- 核心逻辑:逐个判断输入键是否存在于目标表中,匹配到即返回对应结果
local input_key = "name2" local target_table, table_name if A[input_key] ~= nil then target_table = A table_name = "A" elseif B[input_key] ~= nil then target_table = B table_name = "B" end if table_name then print("匹配到的表名称:" .. table_name) else print("无匹配表") end
注意事项
如果目标表配置了__index元方法,为了避免元表逻辑干扰键存在性判断,可以用rawget()判断键是否真实存在于表自身,示例:if rawget(A, input_key) ~= nil then
内容的提问来源于stack exchange,提问作者Gipnoza
相关产品推荐
相关产品推荐

