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) do10 print(value) -->1 2 3 411 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 3end
--Sample_3:local tab3 = { [2] = 2,[4] = 4,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,} for key,value in pairs(tab1) do print(value) -->1 2 4 3end
--Sample_2:local tab2 = { [1] = 1,value in pairs(tab2) do print(value) -->6 2 3 1 5end
--Sample_3:local tab3 = { ["1"] = 1,["2"] = 2,["3"] = 3,["5"] = 5,["6"] = 6,value in pairs(tab3) do print(value) -->1 3 2 5 6end
3. #table
for i=1,#(table) do
end
注:这种方式的遍历关键的地方在于获取table的大小,#(table)只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历并且返回table的大小,无论后面是否仍然是顺序的key。
--Sample_1:local tab1 = { [1] = 1,} print("#table:"..#(tab1)) -->4for i = 1,#(tab1) do print(tab1[i]) -->1 2 3 4end --Sample_2:local tab2 = { [1] = 1,} print("#table:"..#(tab2)) -->3for i = 1,#(tab2) do print(tab2[i])end--Sample_3:local tab3 = { [2] = 2,} print("#table:"..#(tab3)) -->0for i = 1,#(tab3) do print(tab3[i]) -->没有打印end
4. table.maxn(table)
这种方式的遍历和第三种方式差不多,关键的地方是在table.maxn(table),table.maxn(table)的意思是获取table中最大值的key。
local tab2 = { [1] = 1,["a"] = 4,} print("table.maxn:"..table.maxn(tab2)) -->6for i = 1,table.maxn(tab2) do print(tab2[i]) -->1 2 3 nil 5 6end
--Sample_2:local tab3 = { [2] = 2,} print("table.maxn:"..table.maxn(tab3)) -->4for i = 1,table.maxn(tab2) do print(tab3[i]) -->nil 2 3 4 nil nilend
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 52 73 82.将某项值置空
table[k] = nil
直接将某项值置空
local a = { [‘3019‘] = 3019,[‘3020‘] = 3020,[‘3021‘] = 3021,[‘3017‘] = 3017}a[‘3019‘] = nilfor k,v in pairs(a) do print(k,v)end输出:3020 30203017 30173021 3021总结
以上是内存溢出为你收集整理的lua中table的遍历,以及删除全部内容,希望文章能够帮你解决lua中table的遍历,以及删除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)