如何在Lua数组中判断指定数字是否存在(避免索引混淆)
正确判断数字是否存在于Lua数组中的方法(不转字符串)
问题原因
你之前用if Array[number] then的写法错误,因为Lua中表的[]操作是按索引取值,而非检查值是否存在。比如你要找数字4时,Array[4]取到的是数组第4个元素15,所以会误判为存在,但实际上4并不是数组里的元素。
解决方案
1. 遍历数组逐个检查(单次查询推荐)
直接遍历数组所有元素,和目标值对比,适合仅需一次查询的场景:
local Array = {1, 8, 10, 15, 20, 30} local target = 4 local isExist = false -- 用ipairs遍历数组的顺序元素 for _, val in ipairs(Array) do if val == target then isExist = true break -- 找到目标后提前终止循环,提升效率 end end print(isExist) -- 输出 false
2. 构建值映射表(多次查询推荐)
如果需要多次判断不同数字是否存在,先把数组元素转成以值为键的映射表,后续查询可在O(1)时间内完成:
local Array = {1, 8, 10, 15, 20, 30} local valueLookup = {} -- 先构建映射表 for _, val in ipairs(Array) do valueLookup[val] = true end -- 查询目标值 print(valueLookup[4] or false) -- 输出 false print(valueLookup[15] or false) -- 输出 true
这里用元素值作为表的键,和数组的索引完全区分开,不会出现混淆,重复查询时效率更高。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

