Lua中实现不同遍历频率的双表循环问题求助
我来帮你搞定这个嵌套循环的问题!你想要的效果是每个group先遍历完所有color,再切换到下一个group,也就是先输出Group1的三个颜色,再轮到Group2,以此类推对吧?
先看你原来代码里的几个小问题:
- 循环语法写错了:
for i=1.3应该改成for i=1, 3(用逗号分隔循环的起始和结束值) - 没有定义
j变量,也没处理color的遍历逻辑 - 循环顺序不对,没有实现"group固定+遍历所有color"的嵌套逻辑
方案一:直观的嵌套循环(推荐)
这是最容易理解的方式,外层循环遍历group,内层循环遍历color,同一个group会依次搭配所有颜色:
local color = {"Blue", "Green", "Red"} local group = {1, 2, 3} -- 外层循环逐个取出group for _, current_group in ipairs(group) do -- 内层循环让当前group遍历所有color for _, current_color in ipairs(color) do cmd(string.format('group %i ; store color %q ; clearall', current_group, current_color)) -- 如果需要打印你预期的输出格式,可以加这句: -- print(string.format('Group %i %s', current_group, current_color)) end end
运行后就会输出你想要的:Group 1 Blue, Group 1 Green, Group 1 Red, Group 2 Blue...
方案二:单循环计算索引(适合必须用单循环的场景)
如果因为某些限制只能用单个for循环,可以通过数学计算来映射group和color的索引——每3次循环切换一个group,color则循环遍历:
local color = {"Blue", "Green", "Red"} local group = {1, 2, 3} local total_cycles = #group * #color -- 总循环次数:3×3=9 for i=1, total_cycles do -- 计算当前对应的group索引:每#color次切换一个group local group_idx = math.ceil(i / #color) -- 计算当前对应的color索引:循环遍历color列表 local color_idx = (i - 1) % #color + 1 cmd(string.format('group %i ; store color %q ; clearall', group[group_idx], color[color_idx])) -- 打印预期输出: -- print(string.format('Group %i %s', group[group_idx], color[color_idx])) end
这个方案的好处是不管group和color的数量是多少,代码都能自适应,不用硬写数字。
内容的提问来源于stack exchange,提问作者Martijn van Dam
相关产品推荐
相关产品推荐

