Как получить значение из таблицы в Lua

У меня есть таблица с несколькими значениями, и я хочу распечатать каждое из них.

Быть как:

'значение_1' 'значение_2' и т. д.

 table = {
        {'value_1'},
        {'value_2'},
        {'value_3'},
        {'value_4'},
    }

Я пробовал с for k, v, но не смог:

for k, v in pairs(table) do
    print(v)
end

person whiteblXK    schedule 03.01.2018    source источник


Ответы (3)


Значения вашей таблицы сами по себе являются таблицами. Так что попробуйте вместо этого:

for k, v in pairs(table) do
    print(v[1])
end

Или создайте более простую таблицу и используйте исходный код:

table = {
    'value_1',
    'value_2',
    'value_3',
    'value_4',
}
person lhf    schedule 03.01.2018

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

-Сделать таблицу локальной переменной (например, local table = {}; -Удалите ненужные таблицы (например): {'value1'}; >> 'value1'; -Измените цикл k, v на общий цикл for (я считаю, что это было бы более эффективно?).

Окончательный код (как я бы сказал):

local Table = {
    "value_1";
    "value_2";
    "value_3";
    "value_4";
};

for Key = 1, #Table, 1 do
    print(Table[Key]);
end;

Не стесняйтесь задавать любые вопросы. Да, и если вы планируете запускать этот код много раз, подумайте о том, чтобы поместить local print = print; над кодом, чтобы определить локальную переменную (они быстрее).

person levi brach    schedule 03.01.2018
comment
Здравствуйте, это мой окончательный код: pastebin.com/avmyfpF5, поэтому мне нужно изменить для k, v на быть более оптимизированным? Моя локальная таблица загружается в память только один раз, но цикл выполняется много раз - person whiteblXK; 05.01.2018

Вы работаете с многомерными массивами, когда у вас есть подтаблицы. Вы можете проиндексировать подтаблицу, как показано ниже.

local tab = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
}

for i, v in next, tab do
    print(i, v)
    for n, k in next, v do
        print(">", n, k)
    end
end

-- 1    table: 000001
-- > 1  1
-- > 2  2
-- > 3  3
-- 2    table: 000002
-- > 1  4
-- > 2  5
-- > 3  6
-- 3    table: 000003
-- > 1  7
-- > 2  8
-- > 3  9

Чтобы проиндексировать приведенную выше таблицу без циклов for, вы можете использовать [].

print(tab[1][1]) --> 1
print(tab[1][2]) --> 2
print(tab[2][1]) --> 4
print(tab[2][2]) --> 5

Вы НЕ ограничены числовыми индексами. Вы можете использовать строки и особый способ индексирования с их помощью.

local tab = {
    x = 5,
    y = 10,
    [3] = 15
}

print(tab.x, tab["y"], tab[3]) --> 5   10   15   
person user2262111    schedule 05.01.2018