1. 程式人生 > >lua中table的遍歷,以及刪除

lua中table的遍歷,以及刪除

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 }
 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

lua中table的遍歷,以及刪除