2013-07-02 98 views
30

所以,我必須沿着這些路線表的東西:如何在Lua中遍歷表?

arr = 
{ 
    apples = { 'a', "red", 5 }, 
    oranges = { 'o', "orange", 12 }, 
    pears = { 'p', "green", 7 } 
} 

它似乎並不像它可以根據自己的索引來訪問他們,和值本身是表,所以我剛纔提出的第一個值嵌套表的它的指數,所以現在看起來是這樣的:

arr = 
{ 
    apples = { 0, 'a', "red", 5 }, 
    oranges = { 1, 'o', "orange", 12 }, 
    pears = { 2, 'p', "green", 7 } 
} 

所以,現在我使用這些表的一個任何時候,我知道了指標是什麼,但還是不能讓到表使用索引,所以我開始編寫一個循環遍歷它們的函數,並檢查索引,直到找到合適的索引。然後我意識到......如果我不能通過它們的索引來引用它們,我怎麼能通過它們呢?所以,現在我卡住了。我真的很想在大多數時候能夠輸入arr.apples和arr [1],但是當然有時候必須同時完成。

+1

這與來自@greatwolf答案,除非有一個「」每個陣列排之間將失敗。蘋果= {0,'a','紅色',5}, 桔子= {1,'o','橙色',12}, 梨= {2,'p', 「綠色」,7}, }'''可以看到一個工作示例:http://ideone.com/yWKHx7 –

+0

@KjellHedström我已經編輯了OP的問題並解決了小的語法錯誤。接得好。 – greatwolf

回答

52

遍歷所有的鍵 - 值對的表,你可以使用pairs

for k, v in pairs(arr) do 
    print(k, v[1], v[2], v[3]) 
end 

輸出:

pears 2 p green 
apples 0 a red 
oranges 1 o orange 

編輯:請注意,Lua不保證表的關聯部分的任何迭代順序。如果您想以特定順序訪問項目,請從arr中檢索密鑰並對其進行分類。然後通過排序鍵訪問arr

local ordered_keys = {} 

for k in pairs(arr) do 
    table.insert(ordered_keys, k) 
end 

table.sort(ordered_keys) 
for i = 1, #ordered_keys do 
    local k, v = ordered_keys[i], arr[ ordered_keys[i] ] 
    print(k, v[1], v[2], v[3]) 
end 

輸出:

apples a red  5 
    oranges o orange 12 
    pears p green 7 
+0

只是注意到...爲什麼它打印錯誤的順序?如果按順序打印它們,我可以在表格中省略索引變量,只依靠它打印的順序來查找索引,這很好。 –

+2

Lua不保證表的關聯部分的迭代順序。 – greatwolf

+1

@Lemony我已經添加了一個關於如何以特定順序遍歷表的示例。 – greatwolf

8

如果您想通過多個鍵引用嵌套表,您可以將它們分配給單獨的鍵。這些表格不重複,仍然引用相同的值。

arr = {} 
apples = {'a', "red", 5 } 
arr.apples = apples 
arr[1] = apples 

此代碼塊可以讓你在所有的鍵 - 值對的表(http://lua-users.org/wiki/TablesTutorial)迭代:

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