lua中table的遍历,以及删除
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,[4] = 4,value in ipairs(tab3) do print(value) -->没有打印 end 2. pairs for key,value in pairs(table) do 这种方式的遍历是根据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 3 end --Sample_2: local tab2 = { [1] = 1,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,value in pairs(tab3) do print(value) -->1 3 2 5 6 end 3. #table for i=1,#(table) do --Sample_1: local tab1 = { [1] = 1,} print("#table:"..#(tab1)) -->4 for i = 1,#(tab1) do print(tab1[i]) -->1 2 3 4 end --Sample_2: local tab2 = { [1] = 1,} print("#table:"..#(tab2)) -->3 for i = 1,#(tab2) do print(tab2[i]) end --Sample_3: local tab3 = { [2] = 2,} 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,["a"] = 4,} 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,} 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.将某项值置空
|