如何遍历Lua中的表?

问题描述 投票:52回答:3

所以,我有一张桌子沿这几行:

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],但是当然有必要同时输入两个。

arrays loops lua key lua-table
3个回答
91
投票

要遍历表中的所有键/值对,可以使用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

9
投票

如果要通过多个键引用嵌套表,可以将它们分配给单独的键。这些表没有重复,仍然引用相同的值。

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

0
投票

这里的所有答案都建议使用对,但要注意,它并非一直都有效。

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
© www.soinside.com 2019 - 2024. All rights reserved.