在Lua中, 如何遍历一个Table元素,主要有两种类型:
- 1.pairs:下标从1开始,并且是连续的才可以使用
- 2.ipairs:是无序的
示例local t = {
[10] = 1,
[20] = 2,
[30] = 3,
[40] = 4,
[50] = 5,
[60] = 6
}
for k,v in pairs (t) do
print("t1", k, v)
end
for k,v in ipairs (t) do
print("t2", k, v)
end
打印结果:
可以发现,使用ipairs的结果根本就没有打印出来,因为ipairs是从1开始打印的,
那像这种不是从1开始的, 又想要顺序打印要怎么做呢!
这时候需要借助另外一个表,原理类似于这样子
local temp = {
[1] = k1,
[2] = k2,
[3] = k3,
[4] = k4,
[5] = k5
}
其中k1,k2...k5分别代表 t中的下标值(10,20,......60)
只要做到这个, 就可以用ipairs遍历temp,从而得到相对应的t了。
这里在《program in lua》中已经有现在代码可以使用了,
function pairsByKeys(t)
local a = {}
for n in pairs(t) do a[#a + 1] = n end
table.sort(a)
local i = 0
return function ()
i = i + 1
return a[i], t[a[i]]
end
end
改变以前的遍历代码为以下,其实就是pairs改为 pairsBykeys
for k,v in pairs (t) do
print("t1", k, v)
end
print("___________________")
for k,v in Utils.pairsByKeys (t) do
print("t2", k, v)
end
打印如下,可以看到, 下面一排的打印结果已经是有序的了!
时间: 2024-10-12 21:17:14