lua中table的遍歷,以及刪除
阿新 • • 發佈:2019-02-22
lua bsp 順序 pairs pos 排列 方式 code 16px
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 } 9for 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
lua中table的遍歷,以及刪除