Lua - 使用 for 循环创建嵌套表

我对 Lua 还非常陌生,所以如果有相关的资料可以帮助理解表,我会感到很高兴。

我解码了一个 JSON 对象,并想要使用它的数据构建一个正确的表,而不是像下面这样写 64 行代码:

a = {}
  a[decode.var1[1].aId] = {decode.var2[1].bId, decode.var3[1].cId}
  a[decode.var1[2].aId] = {decode.var2[2].bId, decode.var3[2].cId}
  a[decode.var1[3].aId] = {decode.var2[3].bId, decode.var3[3].cId}
  ...等等

因为数字是连续的 1-64,我认为我应该能够使用 for 循环来构建它。 不幸的是,尽管我试过了一些构建表的想法,但我似乎找不到任何使用循环创建嵌套表的方法或相关资料。

希望能得到任何帮助或指引。

点赞
用户9922866
用户9922866

Lua 的 for 循环,在我看来,相当容易理解:

for i = 1, 10 do
   print(i)
end

这个循环会打印出从 110 的正整数。

Lua 的 for 循环还可以加上一个可选的第三个参数——默认为 1——用来设置循环的步长:

for i = 1, 10, 2 do
   print(i)
end

这个循环会打印出第一个到第十个数,但是每隔一个数就跳过打印,即步长为 2;因此,会打印出 1 3 5 7 9

在你的例子中,如果我理解正确的话,你知道你的 for 循环的最小和最大边界分别是 164。你可以写一个循环来解码这些值,并将它们放在一个表里,像这样:

local a = {}

for i = 1, 64 do
    a[decodevar.var1[i].aId] = {decode.var2[i].bId, decode.var3[i].cId}
end
2020-02-24 04:51:48
用户9558467
用户9558467

你可以通过 for 循环生成一个新表,该表包含从解码 JSON 得到的所有内容。

例如,

function jsonParse(jsonObj)
    local tbl = {}
    for i = 1, 64 do
        a[decodevar.var1[i].aId] = {decode.var2[i].bId, decode.var3[i].cId}
    end
    return tbl
end

处理嵌套情况,可以按如下方式递归调用该方法

function jsonParse(jsonObj)
    local tbl = {}
    for i = 1, 64 do
        a[decodevar.var1[i].aId] = {decode.var2[i].bId, decode.var3[i].cId}
        if type(decode.var2[i].bId) == "table" then
            a[decodevar.var1[i].aid[0] = jsonParse(decode.var2[i].bId)
        end
    end
end

顺便说一下,我不明白你为什么要使用已经完成你所需工作的表来创建新表。我假设它们只是随机的,您可能需要根据您已有的 decodevar 变量结构来编辑代码。

2020-02-25 11:13:21