arrays - LUA 脚本:嵌套循环仅插入最后一项
问题描述
我有两个循环,一个主循环和一个主循环内的子循环。两个循环都填充同一个表(和子表)。但是由于某种原因,子循环仅将最后添加的项目存储在嵌套表中。
例如,主组 1 具有存储为 1-9 的子组:
printTable(data[1][subItems][1]) -- 返回错误(索引 nil 值)
printTable(data[1][subItems][9]) -- 将表转储到控制台
如果我在一次迭代后中断子循环,则data[1][subItems][1]包含数据
for i=startId, endId, 10 do
items = loadItems(i)
data[i] = {['items'] = items}
for x=i+1, i+10-1 do
subItems = loadItems(x)
print('adding items to sub-group: '..x..' for main group: '..i)
data[i]['subItems'] = {}
data[i]['subItems'][x] = {['items'] = subItems}
end
end
end
由于我在子循环中打印了一些调试信息,我知道代码正在执行。而且我知道 loadItems(x) 在每次迭代时都在获取数据,因为如果我将 loadItems(x) 转储到子循环中的控制台,那么每次迭代都会出现。
这是什么魔法?
解决方案
愚蠢的我,我怎么会错过它!
答案当然是将data[i][subItems] = {} 移到子循环之外:
for i=startId, endId, 10 do
items = loadItems(i)
data[i] = {['items'] = items}
data[i]['subItems'] = {} <----------------------------------------------
for x=i+1, i+10-1 do
subItems = loadItems(x)
print('adding items to sub-group: '..x..' for main group: '..i)
data[i]['subItems'][x] = {['items'] = subItems}
end
end
end
推荐阅读
- directus - 我可以只使用 DirectusSDK 而不是 REST 或 GraphQL 吗?
- mysql - 在 Mac OS X 上安装 RMySQL 以在 Docker 中运行时出错
- python - 接收错误:_tkinter.TclError:无效的命令名称“.!frame3.!treeview”
- ios - 如何找到属于 Apple 框架的属性的默认值?
- json - Azure DevOps Server 2019 扩展:如何限制我的自定义页面出现的工作项数据输入表单?
- android - 布局对片段膨胀不起作用
- excel - 根据小数位数对列的值进行排序
- spring - 具有多分区分布式部署的 Apache Kafka
- html - Django 不接收 HTML 表单中的 POST 方法
- c++ - 为什么我无法使用索引访问字符串单个字符