如何在Lua中检查table是否包含多个指定元素?代码失效求助
问题原因
你的inTable函数逻辑有误:它检查的是目标元素是否是table的键(key),但你的table_是数组形式,键是数字索引(1、2),而"A"、"B"是table的值(value),所以t["A"]永远是nil,函数返回false,导致条件不成立。
解决方案
方法1:遍历table检查值
修改inTable函数,遍历table的所有值来判断是否存在目标元素:
function inTable(t, e) for _, value in ipairs(t) do if value == e then return true end end return false end -- 示例测试 local table_ = {"A","B"} if inTable(table_, "A") and inTable(table_, "B") then print("table同时包含A和B") -- 执行你的业务逻辑 end
- 用
ipairs遍历适合连续数字索引的数组型table,效率更高;如果你的table可能包含非数字索引的键,可替换为pairs遍历所有键值对。
方法2:转哈希表快速查找(适合多次检查场景)
如果需要频繁检查元素是否存在,可以先把数组转成以元素值为键的哈希表,后续查找时间复杂度为O(1):
local table_ = {"A","B"} -- 预转哈希表 local valueMap = {} for _, v in ipairs(table_) do valueMap[v] = true end -- 直接通过键查找 if valueMap["A"] and valueMap["B"] then print("table同时包含A和B") -- 执行你的业务逻辑 end
内容的提问来源于stack exchange,提问作者unwritten_k
相关产品推荐
相关产品推荐

