как получить доступ к данным в такой таблице? - PullRequest
0 голосов
/ 18 февраля 2012

Я пишу программу с Луа. У меня есть данные, которые организованы следующим образом:

t= {
    i1 = {
        p1 = { value = "i1p1" },
        p2 = { value = "i1p2" }, 
        -- etc
        pm = { value = "i1pm" }
    },
    i2 = {
        p1 = { value = "i2p1" },
        p2 = { value = "i2p2" },
        -- etc
        pm = { value = "i2pm" }
    },
    im = {
        p1 = { value = "imp1" },
        p2 = { value = "imp2" },
         -- etc
        pm = { value = "impm" }
    }
} --(inner tables)

По-другому каждая группа данных индексируется двумя переменными i & p, я уверен, что данные хранятся правильно, но мне нужен способ распечатать данные из их таблиц, потому что я не буду знать значения i и p перебирать их или даже числа n & m. Любое тело знает, как это сделать с lua?

1 Ответ

1 голос
/ 19 февраля 2012

Если вам известна глубина ваших вложенных (внутренних) таблиц, вы можете явно выполнить итерацию до этой глубины:

for k1,v1 in pairs(t) do
    for k2,v2 in pairs(v1) do
        for k3, v3 in pairs(v2) do
            print(k3, ":", v3)
        end
    end
end

В качестве альтернативы, вы можете рекурсивно перебирать вашу вложенную структуру:

function print_tbl(tbl)
    if type(tbl) == "table" then
        for _,v in pairs(tbl) do
            print_tbl(v)
        end
    else
        print(tbl)
    end
end

print_tbl(t)

Это всего лишь пример. Если ваши таблицы содержат функции, пользовательские данные или циклы вложенности, вам потребуется другой подход. Взгляните на таблица сериализации в пользовательской вики Lua. Сериализация требует разумной обработки таблиц с вложенностью, функциями, циклами и т. Д. Вы можете использовать уроки, извлеченные из ваших данных.

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