Lua 内table遍历
在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:
1. ipairs
for index, value in ipairs(table) do
end
注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面是否仍然是顺序的key。
1 --Sample_1:
2 local tab1 =
3 {4 [1] = 1,5 [2] = 2,6 [3] = 3,7 [4] = 4,8 }9 for key, value in ipairs(tab1) do
10 print(value) -->1 2 3 4
11 end
--Sample_2:
local tab2 ={
[1] = 1,
[2] = 2,
[3] = 3,
[5] = 5,
[6] = 6,
}for key, value in ipairs(tab2) do
print(value) -->1 2 3
end
--Sample_3:
local tab3 ={
[2] = 2,
[3] = 3,
[4] = 4,
}for key, value in ipairs(tab3) do
print(value) -->没有打印
end
2. pairs
for key, value in pairs(table) do
end
这种方式的遍历是根据table中key的hash值排列的顺序来遍历,并非是table中key的排列顺序,并且不关心key是否从1开始和key是否以1递增。
--Sample_1:
local tab1 ={
[1] = 1,
[2] = 2,
[3] = 3,
[4] = 4,
}for key, value in pairs(tab1) do
print(value) -->1 2 4 3
end
--Sample_2:
local tab2 ={
[1] = 1,
[2] = 2,
[3] = 3,
[5] = 5,
[6] = 6,
}for key, value in pairs(tab2) do
print(value) -->6 2 3 1 5
end
--Sample_3:
local tab3 ={
["1"] = 1,
["2"] = 2,
["3"] = 3,
["5"] = 5,
["6"] = 6,
}for key, value in pairs(tab3) do
print(value) -->1 3 2 5 6
end
3. #table
for i=1, #(table) do
end
注:这种方式的遍历关键的地方在于获取table的大小,#(table)只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历并且返回table的大小,无论后面是否仍然是顺序的key。
--Sample_1:
local tab1 ={
[1] = 1,
[2] = 2,
[3] = 3,
[4] = 4,
}print("#table:"..#(tab1)) -->4
for i = 1, #(tab1) do
print(tab1[i]) -->1 2 3 4
end
--Sample_2:
local tab2 ={
[1] = 1,
[2] = 2,
[3] = 3,
[5] = 5,
[6] = 6,
}print("#table:"..#(tab2)) -->3
for i = 1, #(tab2) do
print(tab2[i])end
--Sample_3:
local tab3 ={
[2] = 2,
[3] = 3,
[4] = 4,
}print("#table:"..#(tab3)) -->0
for i = 1, #(tab3) do
print(tab3[i]) -->没有打印
end
4. table.maxn(table)
这种方式的遍历和第三种方式差不多,关键的地方是在table.maxn(table),table.maxn(table)的意思是获取table中最大值的key。
local tab2 ={
[1] = 1,
[2] = 2,
[3] = 3,
["a"] = 4,
[5] = 5,
[6] = 6,
}print("table.maxn:"..table.maxn(tab2)) -->6
for i = 1, table.maxn(tab2) do
print(tab2[i]) -->1 2 3 nil 5 6
end
--Sample_2:
local tab3 ={
[2] = 2,
[3] = 3,
[4] = 4,
}print("table.maxn:"..table.maxn(tab3)) -->4
for i = 1, table.maxn(tab2) do
print(tab3[i]) -->nil 2 3 4 nil nil
end
Lua table移除某一项,或多项内容
有两种方式来移除table中的数据
1. 按下标来移除
table.remove(table_name, [pos,])
直接移除某个下标的数据,例如:
local t = {5, 6, 7, 8}table.remove(t, 2)for k, v in pairs(t) do
print(k, v)end输出1 5
2 7
3 8
2.将某项值置空
table[k] = nil 直接将某项值置空
local a ={
['3019'] = 3019,
['3020'] = 3020,
['3021'] = 3021,
['3017'] = 3017}
a['3019'] = nil
for k, v in pairs(a) do
print(k, v)end输出:3020 3020
3017 3017
3021 3021