首页 > 解决方案 > 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) 转储到子循环中的控制台,那么每次迭代都会出现。

这是什么魔法?

标签: arraysfor-loopdatatableluanested

解决方案


愚蠢的我,我怎么会错过它!

答案当然是将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

推荐阅读