遍历表
1. pairs 迭代器遍历
pairs 适用于遍历含有键值对的表
local t = {
"apple",
x = 10,
y = 20,
"banana",
"grape",
}
for k, v in pairs(t) do
print(k, v)
end
运行结果:
lua.exe table.lua
1 apple
2 banana
3 grape
y 20
x 10
ipairs 遍历表中的键值对,遍历过程中元素的出现顺序可能是随机的,相同的程序每次运行也可能产生不同的顺序;
唯一确定的是,在遍历的过程中每个元素只会出现一次;
另外:“apple”、“banana”、“grape”他们的键为去除含有键元素后的表索引值
2. ipairs 迭代器遍历
ipairs 适用于遍历列表
例子1:
local t = {
"apple",
x = 10,
y = 20,
"banana",
"grape",
}
for i, v in ipairs(t) do
print(i, v)
end
运行结果:
lua.exe table.lua
1 apple
2 banana
3 grape
例子2:
local t = { 5, 6, 7, 8 }
for i, v in ipairs(t) do
print(i, v)
end
运行结果:
lua.exe table.lua
1 5
2 6
3 7
4 8
例子3:
local t = {
[2] = 5,
[7] = 8,
[100] = 50,
}
for i, v in ipairs(t) do
print(i, v)
end
运行结果:为空
例子4:
local t = {
[1] = 5,
[7] = 8,
[100] = 50,
}
for i, v in ipairs(t) do
print(i, v)
end
运行结果:
lua.exe table.lua
1 5
ipairs 顺序遍历列表,但是如果列表第一个元素的索引下标不为 1,
或者再遍历过程中,下一个索引对应的值为nil,则停止遍历
3. for 循环遍历
for 循环遍历也是一种顺序遍历方式,比 ipairs 遍历方式更为灵活
例子1:
local t = {
[1] = 5,
[7] = 8,
[100] = 50,
}
for i = 1, 100 do
if t[i] ~= nil then
print(i, t[i])
end
end
运行结果:
lua.exe table.lua
1 5
7 8
100 50
例子2:
local t = {
"apple",
"banana",
"grape",
}
for i = 1, #t do
print(i, t[i])
end
运行结果:
lua.exe table.lua
1 apple
2 banana
3 grape
例子3:
local t = {
"apple",
"banana",
"grape",
"orange",
}
for i = 1, #t, 2 do
print(i, t[i])
end
运行结果:
lua.exe table.lua
1 apple
3 grape
for 以索引下标进行对表的访问遍历,对比 ipairs 更加灵活,
当以for i = 1, #t do这种形式进行访问时,其实和 ipairs 的访问方式一样
打印表
local t = {
"apple",
"banana",
x = 10,
y = 20,
z = {
x = 15,
"apple",
y = 20,
},
"grape",
"orange",
w = {
w = {
x = 10,
y = 20,
}
}
}
function PrintTable(t, depth)
if (t == nil) or (type(t) ~= "table") then
return t
end
for k, v in pairs(t) do
if type(v) == "table" then
PrintDepth("[" .. k .. "] = {", depth)
PrintTable(v, depth + 1)
PrintDepth("}", depth)
else
PrintDepth("[" .. k .. "]" .. " = " .. v, depth)
end
end
return
end
function PrintDepth(str, depth)
local info = ""
for i = 1, depth do
info = info .. " "
end
print(info .. str)
end
PrintTable(t, 0)
运行结果
lua.exe table.lua
[1] = apple
[2] = banana
[3] = grape
[4] = orange
[y] = 20
[x] = 10
[w] = {
[w] = {
[y] = 20
[x] = 10
}
}
[z] = {
[1] = apple
[y] = 20
[x] = 15
}