2015-12-31 233 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 

但是,如果我遍歷列表,我得到「零」值「LX 「和‘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 

或者,如果你想保留字符串列表,並遍歷字符串,使用這些字符串將Windows的第二個表作爲一個關鍵。

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'關鍵字,因爲沒有關鍵字的變量被添加到* global scope *中。 – roeland