Lua:为什么这段代码不能产生正确的结果?嵌套表

时间:2014-04-20 13:55:53

标签: lua nested lua-table

local tbmoffsets = {}
local facedir = {}
local row = {}
local height = 10
local widthl = -5
local widthr = 5
local depth = 3



            Z1=1
            for Y1 = height, -1,-1 do
                for X1 = widthl,widthr do
                  row[#row + 1] = {X = X1, Y = Y1, Z = Z1}
                end 
             --facedir[Y1]=row
            end
           for m = height,-1,-1 do 
            for n = 1,#row do 
             o = row[n].Y
             if o == m then
              print(o)
              facedir[o] = row[n]
             end
            end 
           end
tbmoffsets[1] = facedir

为什么这段代码不会产生这样的表格;

1
 1
  1
    X=-1    Z=1     Y=2
  2
    X=0     Z=1     Y=2
  3
    X=1     Z=1     Y=2
 2
  1
    X=-1    Z=1     Y=1
  2
    X=0     Z=1     Y=1
  3
    X=1     Z=1     Y=1
 3
  1
    X=-1    Z=1     Y=0
  2
    X=0     Z=1     Y=0
  3
    X=1     Z=1     Y=0

你会注意到我想要的格式化将所有类似的Y变量放在那里" block" (表)当我在脑海中读到这段代码时,它应该这样做,但对我来说没有这样的运气,3天这个可用的11行代码,我尝试了十几个或更多相同代码的变体,无论我是什么做到这一点它总是弄乱当前版本产生的结果,只将X值组合在一起= 5然后poof丢弃所有剩余的数据> :(真的让我想打败这台电脑。

上述代码的结果:

1: 
  1: 
    X: 5
    Y: 1
    Z: 1
  2: 
    X: 5
    Y: 2
    Z: 1
  3: 
    X: 5
    Y: 3
    Z: 1
  4: 
    X: 5
    Y: 4
    Z: 1
  5: 
    X: 5
    Y: 5
    Z: 1
  6: 
    X: 5
    Y: 6
    Z: 1
  7: 
    X: 5
    Y: 7
    Z: 1
  8: 
    X: 5
    Y: 8
    Z: 1
  9: 
    X: 5
    Y: 9
    Z: 1
  10: 
    X: 5
    Y: 10
    Z: 1
  0: 
    X: 5
    Y: 0
    Z: 1
  -1: 
    X: 5
    Y: -1
    Z: 1

1 个答案:

答案 0 :(得分:0)

如果您更换

   for m = height,-1,-1 do 
    for n = 1,#row do 
     o = row[n].Y
     if o == m then
      print(o)
      facedir[o] = row[n]
     end
    end 
   end

   for m = height,-1,-1 do
    for n = 1,#row do
     o = row[n].Y
     if o == m then
      if not facedir[o] then
          facedir[o] = {}
      end
      local t = facedir[o]
      t[#t + 1] = row[n]
     end
    end
   end
然后你会得到更像我想要的价值观。虽然如果您创建独立的row表而不是如下所示的巨型row表,您可以完全避免第二个循环。

local tbmoffsets = {}
local facedir = {}
local height = 10
local widthl = -5
local widthr = 5
local depth = 3

local Z1=1
for Y1 = height, -1,-1 do
    local row = {}
    for X1 = widthl,widthr do
        row[#row + 1] = {X = X1, Y = Y1, Z = Z1}
    end
    facedir[Y1]=row
end

tbmoffsets[1] = facedir