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

为什么这段代码不能产生如下表格:

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 变量放在它们自己的“块”(表格)中,当我在脑海中阅读该代码时,它应该这样做,但对我来说没有这样的运气,这个简单的 11 行代码让我试了三天,我已经尝试了十几种或更多的相同代码变化,无论我对它做什么,它总是搞乱当前版本产生结果,只将 X 值为 5 的所有数据分组然后消失了 >:( 真的让我想打败这台计算机。

以上代码的结果:

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
点赞
用户258523
用户258523

如果你替换

   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
2014-04-20 15:59:33