Lua如何根据小表指定索引生成长度12的0/1标记新表
Lua 按源表生成指定长度0/1状态表实现方案
核心实现逻辑是先将源表的值预处理为哈希结构做O(1)时间复杂度的存在性判断,再在原有迭代逻辑中按判断结果填充值,避免循环内重复遍历源表带来的性能损耗。
对应示例期望输出的实现(Lua常规1索引表)
你的示例期望输出newTable = {1,0,1,0,1,0,1,0,1,0,1,0}是Lua默认的1索引顺序表,第一个元素对应迭代i=0的判断结果,直接用以下代码即可:
-- 源表 local t = {0,2,4,6,8,10} -- 预处理:构建值存在性映射 local valueSet = {} for _, val in ipairs(t) do valueSet[val] = true end local newTable = {} -- 原有0-11迭代逻辑 for i = 0, 11 do -- 匹配到源表值填1,否则填0 newTable[#newTable + 1] = valueSet[i] and 1 or 0 -- 此处可插入原循环内的其他业务逻辑 end
运行后newTable的结果和你给出的预期完全一致。
索引对齐版本(新表索引与迭代i值一一对应)
如果你需要新表的索引和迭代值i完全对齐(即newTable[0]对应i=0的状态,不需要索引偏移),把循环内的赋值逻辑修改为直接指定索引即可:
local newTable = {} for i = 0, 11 do newTable[i] = valueSet[i] and 1 or 0 -- 其他业务逻辑 end
实现说明
- 不建议在每次循环中遍历源表判断i是否存在,该写法时间复杂度为O(n*m),当迭代长度或源表长度较大时性能较差;预处理哈希映射的写法总时间复杂度为O(n+m),性能稳定。
- 该实现完全兼容你给出的约束:源表长度始终不大于迭代总长度,不需要额外做边界处理。
内容的提问来源于stack exchange,提问作者jersmi
相关产品推荐
相关产品推荐

