在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
打印如下,可以看到, 下面一排的打印結果已經是有序的了!