2015-12-31 3 views
0

Я собираюсь упростить ситуацию настолько, насколько смогу. У меня есть следующий код:Lua - итерация через вложенный список

windows = { "window1", "window2" } 

window1 = { 
x = 100 
y = 100 
properties = { active = false, width = 200, height = 200 } 
} 

window2 = { 
x = 0 
y = 0 
properties = { active = false, width = 200, height = 200 } 
} 

Если я делаю следующее, я получаю правильный вывод:

print (window1.x) 
OUTPUT: 0 
print (window1.properties.active) 
OUTPUT: false 

ОДНАКО, если я итерацию по списку, я получаю «ноль» значения для «лк "и„l.properties.active“:

for _,l in ipairs(windows) do 
    print (l) 
    print (l.x) 
    print (l.properties.active) 
end 

есть другой способ мне нужно перебирать переменные в списках, так что я могу получить значение?

ответ

3

Это не вложенная таблица, а таблица, содержащая строки. И, как вы только что видели, строка не содержит значения для ключа "x".

Вы должны поставить столов в последовательности:

local window1 = {...} -- first table 

local window2 = {...} -- second table 

local windows = {window1, window2} 

for _,l in ipairs(windows) do 
    -- do stuff with l 
end 

Или, если вы хотите сохранить список строк и перебирать струны, поставить окна во второй таблице, используя эти строки как ключ.

local windowNames = { "window1", "window2" } 
local windows = {} 

windows.window1 = {...} -- first table 

windows.window2 = {...} -- second table 

for _,l in ipairs(windowNames) do 
    local ourWindow = windows[l] 
    -- do stuff with ourWindow 
end 
+0

Это правильно. Знаете ли вы, как я могу использовать эти строки как имена переменных в Lua? – Neekoy

+1

@Neekoy да, но это зависит от того, хотите ли вы заказать таблицы или нет. – roeland

+1

@Neekoy Я добавил пример, который хранит порядок строк. Я также добавил слова «local», так как переменная без этого ключевого слова добавляется в * глобальную область *. – roeland

Смежные вопросы