所以,我有一张桌子沿这几行:
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 vs arr [1],但是当然有必要同时输入两个。
要遍历表中的所有键/值对,可以使用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
Edit:请注意,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
如果要通过多个键引用嵌套表,可以将它们分配给单独的键。这些表没有重复,仍然引用相同的值。
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
这里的所有答案都建议使用对,但要注意,它并非一直都有效。
t = {[2] = 44, [4]=77, [6]=88}
--This for loop prints the table
for key,value in next,t,nil do
print(key,value)
end
--This one does not print the table
for key,value in ipairs(t) do
print(key,value)
end