lua 刪除key,value table中指定元素

要刪除key,value中table中指定的元素,

不能簡單的使用for循環來刪除

原因如下:

在table表中使用for迭代時,將符合條件的元素刪除時,後面元素前移,然後產生跳躍
而且使用for i=1,#mytable 這樣的循環時,由於在for時就已經確定了循環的終點是table的總長度,
在整個for運行過程中,終點不會改變。
所以當你刪除元素時,在循環到i = #mytable 時,會報錯nil。因爲此時table長度已經縮短了。


但是,使用while循環就在循環中刪除元素。

具體實現如下

removeElement.lua

--遍歷table的元素
function printTab(tab)
    for i,v in pairs(tab) do
        print(i,v)
    end
end

-- 刪除table中的元素
local function removeElementByKey(tbl,key)
    --新建一個臨時的table
    local tmp ={}

    --把每個key做一個下標,保存到臨時的table中,轉換成{1=a,2=c,3=b} 
    --組成一個有順序的table,才能在while循環準備時使用#table
    for i in pairs(tbl) do
        table.insert(tmp,i)
    end

    local newTbl = {}
    --使用while循環剔除不需要的元素
    local i = 1
    while i <= #tmp do
        local val = tmp [i]
        if val == key then
            --如果是需要剔除則remove 
            table.remove(tmp,i)
         else
            --如果不是剔除,放入新的tabl中
            newTbl[val] = tbl[val]
            i = i + 1
         end
     end
    return newTbl
end

function main()
    local tbl = {a=5,d=1,b=2,e=4,c=9}
    print("----table元素刪除前--------")
    printTab(tbl)
    print("----table元素刪除後--------")
    local newTbl = removeElementByKey(tbl,"b")
    printTab(newTbl)
main()

執行命令   lua removeElement.lua

輸出結果 :

----table元素刪除前--------
a       5
c       9
b       2
e       4
d       1
----table元素刪除後--------
a       5
d       1
c       9
e       4

刪除table中的元素成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章