Lua - Создать вложенную таблицу, используя цикл - PullRequest
0 голосов
/ 24 февраля 2020

Я очень плохо знаком с 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}
  ...etc

Поскольку числа являются последовательными 1-64, я полагаю, что я должен быть в состоянии построить его, используя для l oop. К сожалению, несмотря на прохождение идей построения таблиц, я не могу найти способ сделать это или найти что-нибудь о создании вложенных таблиц, используя al oop.

. Любая помощь или направление будут оценены.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Lua for-loop, по крайней мере, на мой взгляд, довольно легко понять:

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

Этот l oop включительно печатает натуральные числа от 1 до 10.

Lua for-loop также принимают необязательный третий аргумент (по умолчанию 1), который указывает шаг l oop:

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

This l oop печатает числа от 1 до 10, но пропускает все остальные числа, то есть с шагом 2; поэтому он напечатает 1 3 5 7 9.

. В случае вашего примера, если я правильно понимаю, кажется, что вы знаете минимальные и максимальные границы ваших циклов for, которые равны 1 и 64 соответственно. Вы можете написать al oop, чтобы декодировать значения и поместить их в таблицу следующим образом:

local a = {}

for i = 1, 64 do
    a[decodevar.var1[i].aId] = {decode.var2[i].bId, decode.var3[i].cId}
end
0 голосов
/ 25 февраля 2020

Что вы можете сделать, это сгенерировать новую таблицу со всем содержимым из декодированного JSON с a для l oop.

Например,

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, которая у вас есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...