zoukankan      html  css  js  c++  java
  • 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={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
    
  • 相关阅读:
    在WEB页面中使用Windows Control可行不?
    升级MDMS到2007下啦
    OSS2007与现有系统(asp)如何集成呢
    Directory Class
    P/Invoke能够在ASP.NET中使用吗?
    SPS中的摘要视图下该怎么分页显示信息?
    P/Invoke能够在asp.net 中使用哦
    SVN+AnkhSVN端配置
    利用反射来实现类(含可空字段)的映射
    iis7部署WCF服务应用程序
  • 原文地址:https://www.cnblogs.com/shirln/p/13327870.html
Copyright © 2011-2022 走看看