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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值