• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

lua的table表去重

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

推荐阅读:

方法一

用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table(记作table1),用一个新的table(记作table2)来存放,存放得时候将table1的value作为table2得key,将值赋为true,最后只需要遍历table2,将其的key保存在一个新的table(记作table3)里。

例如:原始table1={1,2,3,4,5,2,3}

  local table1={1,2,3,4,5,2,3}
  local table2={}
  for key,val in pairs(table1) do
     table2[val]=true
  end
  local table3={}
  for key,val in pairs(table2) do
     table.insert(table3,key)--将key插入到新的table,构成最终的结果
  end
方法二
local list={1,2,3,4,5,2,3}
local temp1 = clone(list)
local temp2 = clone(list)
for k1, v1 in ipairs(temp1) do
    for k2, v2 in ipairs(temp2) do
        if v1 == v2then
            table.remove(temp1, k1)
            table.remove(temp2, k1)
        end
    end
end
拓展:移除table中数据里具有某个相同字段的数据,例如,table如下:需移除具有相同value相同的数据
local list={}
list[1]={id=10001,sid=1001,value=5}
list[2]={id=10002,sid=1001,value=3}
list[3]={id=10003,sid=1001,value=4}
list[4]={id=10004,sid=1001,value=5}

利用方法二拓展本功能:

local list={}
list[1]={id=10001,sid=1001,value=5}
list[2]={id=10002,sid=1001,value=3}
list[3]={id=10003,sid=1001,value=4}
list[4]={id=10004,sid=1001,value=5}
local temp1 = clone(list)
local temp2 = clone(list)
for k1, v1 in ipairs(temp1) do
    for k2, v2 in ipairs(temp2) do
        --同种英雄同一星级的移除
        if v1.id ~= v2.id and v1.value == v2.value and v1.sid == v2.sid then
            table.remove(temp1, k1)
            table.remove(temp2, k1)
        end
    end
end

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua-源码-字符串的resize函数-luaS_resize发布时间:2022-07-22
下一篇:
Lua骚操作——三元条件运算符发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap