lua的table表去重

举报
爱上游戏开发 发表于 2022/07/01 23:15:25 2022/07/01
【摘要】 推荐阅读:  我的CSDN 我的博客园 QQ群:704621321 我的个人博客 方法一 用过lua的人都知道,lua的table中...

推荐阅读:

方法一

用过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={1234523}
  local table2={}
  for key,val in pairs(table1) do
     table2[val]=true
  end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  local table3={}
  for key,val in pairs(table2) do
     table.insert(table3,key)--将key插入到新的table,构成最终的结果
  end

  
 
  • 1
  • 2
  • 3
  • 4
方法二
local list={1234523}
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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
拓展:移除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}

  
 
  • 1
  • 2
  • 3
  • 4
  • 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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

文章来源: unity3d.blog.csdn.net,作者:爱上游戏开发,版权归原作者所有,如需转载,请联系作者。

原文链接:unity3d.blog.csdn.net/article/details/105261792

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。