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中的元素成功

你可能感兴趣的:(lua)