lua嵌套表将表插入到另一个表中



好的,我有这个表:

 tbm.offsets = { -- facedir indexed (+1)
    { -- facedir = 0
        { -- first line
            { X = -1, Y =  2, Z =  1 },
            { X =  0, Y =  2, Z =  1 },
            { X =  1, Y =  2, Z =  1 }
        },
        { -- second line
            { X = -1, Y =  1, Z =  1 },
            { X =  0, Y =  1, Z =  1 },
            { X =  1, Y =  1, Z =  1 }
        },
        { -- third line
            { X = -1, Y =  0, Z =  1 },
            { X =  0, Y =  0, Z =  1 },
            { X =  1, Y =  0, Z =  1 }
        },
        { -- forth line
            { X = -1, Y = -1, Z =  1 },
            { X =  0, Y = -1, Z =  1 },
            { X =  1, Y = -1, Z =  1 }
        }
    },
    { -- facedir = 1
        { -- first line
            { X =  1, Y =  2, Z = -1 },
            { X =  1, Y =  2, Z =  0 },
            { X =  1, Y =  2, Z =  1 }
        },
        { -- second line
            { X =  1, Y =  1, Z = -1 },
            { X =  1, Y =  1, Z =  0 },
            { X =  1, Y =  1, Z =  1 }
        },
        { -- third line
            { X =  1, Y =  0, Z = -1 },
            { X =  1, Y =  0, Z =  0 },
            { X =  1, Y =  0, Z =  1 }
        },
        { -- forth line
            { X =  1, Y = -1, Z = -1 },
            { X =  1, Y = -1, Z =  0 },
            { X =  1, Y = -1, Z =  1 }
        }
    },
    { -- facedir = 2
        { -- first line
            { X = -1, Y =  2, Z = -1 },
            { X =  0, Y =  2, Z = -1 },
            { X =  1, Y =  2, Z = -1 }
        },
        { -- second line
            { X = -1, Y =  1, Z = -1 },
            { X =  0, Y =  1, Z = -1 },
            { X =  1, Y =  1, Z = -1 }
        },
        { -- third line
            { X = -1, Y =  0, Z = -1 },
            { X =  0, Y =  0, Z = -1 },
            { X =  1, Y =  0, Z = -1 }
        },
        { -- forth line
            { X = -1, Y = -1, Z = -1 },
            { X =  0, Y = -1, Z = -1 },
            { X =  1, Y = -1, Z = -1 }
        }
    },
    { -- facedir = 3
        { -- first line
            { X = -1, Y =  2, Z = -1 },
            { X = -1, Y =  2, Z =  0 },
            { X = -1, Y =  2, Z =  1 }
        },
        { -- second line
            { X = -1, Y =  1, Z = -1 },
            { X = -1, Y =  1, Z =  0 },
            { X = -1, Y =  1, Z =  1 }
        },
        { -- third line
            { X = -1, Y =  0, Z = -1 },
            { X = -1, Y =  0, Z =  0 },
            { X = -1, Y =  0, Z =  1 }
        },
        { -- forth line
            { X = -1, Y = -1, Z = -1 },
            { X = -1, Y = -1, Z =  0 },
            { X = -1, Y = -1, Z =  1 }
        }
    }
}

它在Lua中已经是一个静态表,但我想让它成为动态的,该表列出了多行块的XYZ坐标,我想能够根据用户输入调整坐标表,例如,如果他们想要一个20块3行高的网格,我该如何在for循环中组装表?每个块都有一个xyz,并且在一行中,每一行都是块的一部分,坐标取决于方向的朝向。

在过去的15分钟里,我开始弄清楚它看起来像什么:

    temp = {}
    temp1 = {}
    temp2 = {}
    temp3 = {}
  for facedir = 1, 4 do
   for block = 1, 5 do 
    for Line = 1,5 do
      for X1 = -5, 5 do
       for Y1 = 5,-1 do 
         for Z1 = 1, 5 do
            temp = {X = X1, Y = Y1, Z = Z1}
          end
        end
      end
       temp1{ line = temp }
    end
     temp2{block = temp1}
   end
     temp3{facedir = temp2}
  end

上面的代码行得通吗?或者什么是更好/更容易实现的解决方案,这些代码将重复执行,有时使用相同的变量,有时使用不同的变量。

控制台""中使用lua打印脚本格式化的静态样本表

1 table: 0x95efdc8
    1 table: 0x95efe18
        1 table: 0x95f1050
            X - -1
            Y - 2
            Z - 1
        2 table: 0x95f10d0
            X - 0
            Y - 2
            Z - 1
        3 table: 0x95efb28
            X - 1
            Y - 2
            Z - 1
    2 table: 0x95efba8
        1 table: 0x95efbf0
            X - -1
            Y - 1
            Z - 1
        2 table: 0x95f1658
            X - 0
            Y - 1
            Z - 1
        3 table: 0x95f16d8
            X - 1
            Y - 1
            Z - 1
    3 table: 0x95f1758
        1 table: 0x95f1780
            X - -1
            Y - 0
            Z - 1
        2 table: 0x95f1800
            X - 0
            Y - 0
            Z - 1
        3 table: 0x95f1880
            X - 1
            Y - 0
            Z - 1
    4 table: 0x95f1900
        1 table: 0x95f1948
            X - -1
            Y - -1
            Z - 1
        2 table: 0x95f19c8
            X - 0
            Y - -1
            Z - 1
        3 table: 0x95f1a48
            X - 1
            Y - -1
            Z - 1
2 table: 0x95f1ac8
    1 table: 0x95f1b18
        1 table: 0x95f1b60
            X - 1
            Y - 2
            Z - -1
        2 table: 0x95f2308
            X - 1
            Y - 2
            Z - 0
        3 table: 0x95f2388
            X - 1
            Y - 2
            Z - 1
    2 table: 0x95f2408
        1 table: 0x95f2430
            X - 1
            Y - 1
            Z - -1
        2 table: 0x95f24b0
            X - 1
            Y - 1
            Z - 0
        3 table: 0x95f2530
            X - 1
            Y - 1
            Z - 1
    3 table: 0x95f25b0
        1 table: 0x95f25f8
            X - 1
            Y - 0
            Z - -1
        2 table: 0x95f2678
            X - 1
            Y - 0
            Z - 0
        3 table: 0x95f26f8
            X - 1
            Y - 0
            Z - 1
    4 table: 0x95f2778
        1 table: 0x95f27c0
            X - 1
            Y - -1
            Z - -1
        2 table: 0x95f2840
            X - 1
            Y - -1
            Z - 0
        3 table: 0x95f28c0
            X - 1
            Y - -1
            Z - 1
3 table: 0x95f2940
    1 table: 0x95f2990
        1 table: 0x95f29d8
            X - -1
            Y - 2
            Z - -1
        2 table: 0x95f2a58
            X - 0
            Y - 2
            Z - -1
        3 table: 0x95f2ad8
            X - 1
            Y - 2
            Z - -1
    2 table: 0x95f2b58
        1 table: 0x95f2ba0
            X - -1
            Y - 1
            Z - -1
        2 table: 0x95f2c20
            X - 0
            Y - 1
            Z - -1
        3 table: 0x95f2ca0
            X - 1
            Y - 1
            Z - -1
    3 table: 0x95f2d20
        1 table: 0x95f2d68
            X - -1
            Y - 0
            Z - -1
        2 table: 0x95f2de8
            X - 0
            Y - 0
            Z - -1
        3 table: 0x95f2e68
            X - 1
            Y - 0
            Z - -1
    4 table: 0x95f2ee8
        1 table: 0x95f2f30
            X - -1
            Y - -1
            Z - -1
        2 table: 0x95f2fb0
            X - 0
            Y - -1
            Z - -1
        3 table: 0x95f3030
            X - 1
            Y - -1
            Z - -1
4 table: 0x95f30b0
    1 table: 0x95f3100
        1 table: 0x95f3148
            X - -1
            Y - 2
            Z - -1
        2 table: 0x95f31c8
            X - -1
            Y - 2
            Z - 0
        3 table: 0x95f3248
            X - -1
            Y - 2
            Z - 1
    2 table: 0x95f32c8
        1 table: 0x95f3310
            X - -1
            Y - 1
            Z - -1
        2 table: 0x95f3390
            X - -1
            Y - 1
            Z - 0
        3 table: 0x95f3410
            X - -1
            Y - 1
            Z - 1
    3 table: 0x95f3490
        1 table: 0x95f34d8
            X - -1
            Y - 0
            Z - -1
        2 table: 0x95f3558
            X - -1
            Y - 0
            Z - 0
        3 table: 0x95f35d8
            X - -1
            Y - 0
            Z - 1
    4 table: 0x95f3658
        1 table: 0x95f36a0
            X - -1
            Y - -1
            Z - -1
        2 table: 0x95f3720
            X - -1
            Y - -1
            Z - 0
        3 table: 0x95f37a0
            X - -1
            Y - -1
            Z - 1

当前脚本的输出:

1 table: 0x95f3848
    1 table: 0x95f3870
        1 table: 0x95f3898
            X - -1
            Y - 2
            Z - 1
        2 table: 0x95f3918
            X - -1
            Y - 1
            Z - 1
        3 table: 0x95f3998
            X - -1
            Y - 0
            Z - 1
        4 table: 0x95f3a40
            X - -1
            Y - -1
            Z - 1
        5 table: 0x95f3ac0
            X - 0
            Y - 2
            Z - 1
        6 table: 0x95f3a18
            X - 0
            Y - 1
            Z - 1
        7 table: 0x95f3be0
            X - 0
            Y - 0
            Z - 1
        8 table: 0x95f3c60
            X - 0
            Y - -1
            Z - 1
        9 table: 0x95f3ce0
            X - 1
            Y - 2
            Z - 1
        10 table: 0x95f3b40
            X - 1
            Y - 1
            Z - 1
        11 table: 0x95f3e40
            X - 1
            Y - 0
            Z - 1
        12 table: 0x95f3ec0
            X - 1
            Y - -1
            Z - 1
    2 table: 0x95f3f40
        1 table: 0x95f3f68
            X - -1
            Y - 2
            Z - 1
        2 table: 0x95f3fe8
            X - -1
            Y - 1
            Z - 1
        3 table: 0x95f4068
            X - -1
            Y - 0
            Z - 1
        4 table: 0x95f4110
            X - -1
            Y - -1
            Z - 1
        5 table: 0x95f4190
            X - 0
            Y - 2
            Z - 1
        6 table: 0x95f40e8
            X - 0
            Y - 1
            Z - 1
        7 table: 0x95f42b0
            X - 0
            Y - 0
            Z - 1
        8 table: 0x95f4330
            X - 0
            Y - -1
            Z - 1
        9 table: 0x95f43b0
            X - 1
            Y - 2
            Z - 1
        10 table: 0x95f4210
            X - 1
            Y - 1
            Z - 1
        11 table: 0x95eff98
            X - 1
            Y - 0
            Z - 1
        12 table: 0x95f4568
            X - 1
            Y - -1
            Z - 1
2 table: 0x95f45e8
    1 table: 0x95f4610
        1 table: 0x95f4638
            X - -1
            Y - 2
            Z - 1
        2 table: 0x95f46b8
            X - -1
            Y - 1
            Z - 1
        3 table: 0x95f4738
            X - -1
            Y - 0
            Z - 1
        4 table: 0x95f47e0
            X - -1
            Y - -1
            Z - 1
        5 table: 0x95f4860
            X - 0
            Y - 2
            Z - 1
        6 table: 0x95f47b8
            X - 0
            Y - 1
            Z - 1
        7 table: 0x95f4980
            X - 0
            Y - 0
            Z - 1
        8 table: 0x95f4a00
            X - 0
            Y - -1
            Z - 1
        9 table: 0x95f4a80
            X - 1
            Y - 2
            Z - 1
        10 table: 0x95f48e0
            X - 1
            Y - 1
            Z - 1
        11 table: 0x95f4be0
            X - 1
            Y - 0
            Z - 1
        12 table: 0x95efa88
            X - 1
            Y - -1
            Z - 1
    2 table: 0x95efcf0
        1 table: 0x95efe98
            X - -1
            Y - 2
            Z - 1
        2 table: 0x95f0528
            X - -1
            Y - 1
            Z - 1
        3 table: 0x95f0ec8
            X - -1
            Y - 0
            Z - 1
        4 table: 0x95f1c28
            X - -1
            Y - -1
            Z - 1
        5 table: 0x95f1ca8
            X - 0
            Y - 2
            Z - 1
        6 table: 0x95f1c00
            X - 0
            Y - 1
            Z - 1
        7 table: 0x95f1dc8
            X - 0
            Y - 0
            Z - 1
        8 table: 0x95f0788
            X - 0
            Y - -1
            Z - 1
        9 table: 0x95f0808
            X - 1
            Y - 2
            Z - 1
        10 table: 0x95f1df0
            X - 1
            Y - 1
            Z - 1
        11 table: 0x95f0968
            X - 1
            Y - 0
            Z - 1
        12 table: 0x95f09e8
            X - 1
            Y - -1
            Z - 1

在脚本的输出中有12个条目,应该只有3个,所以我正在处理它…

修改为语法和逻辑正确,上面的代码如下所示:

local temp3 = {}
for facedir = 1, 4 do
    local temp2 = {}
    for block = 1, 5 do
        local temp1 = {}
        for Line = 1,5 do
            local temp = {}
            for X1 = -5, 5 do
                for Y1 = 5,-1,-1 do
                    for Z1 = 1, 5 do
                        temp[#temp + 1] = {X = X1, Y = Y1, Z = Z1}
                    end
                end
            end
            temp1[Line] = temp
        end
        temp2[block] = temp1
    end
    temp3[facedir] = temp2
end

对于引用,tab = {key = value}将创建一个表,将其存储在tab变量中,其中键为"key",值为变量value中的任意值。如果要使用变量作为键,则需要使用较长的tab = {[key] = value}格式作为键。裸词版本只是tab = {["key"] = value}的语法糖。

最新更新