我有两个循环,一个主循环和一个位于主循环内的子循环。两个循环都填充相同的表(和子表)。但是由于某种原因,子循环仅将最后添加的项目存储在嵌套表中。
例如,主组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)转储到子循环中进行控制台,则每次迭代中都存在该数据。
这是什么巫术?
答案 0 :(得分:1)
对不起,我怎么想念它!
答案当然是将 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