前言:在项目中可能会遇到两个表或者服务器数据和本地数据多次合并产生重复值的问题,今天就来说一下应该怎样来操作。话术太累怎么方便怎么说了.
1、合并and去重
首先在策划 lua 表写个方法便于取数据
------假设这是本地策划表
---模拟爬塔每层有不同的buff效果
local buffList =
{
{id=1001, title="第一层", buff={6688}},
{id=1002, title="第二层", buff={5588,3388}}
}
---根据传的id获取id列表的buff 可写在策划lua表中
function GetLBuffList(id)
local listBuff = {}
for i, v in pairs(buffList) do
if v.buff ~= nil then
if v.id == id then
listBuff = v.buff
end
end
end
return listBuff
end
就算传入的id 是 1002 吧
一般方法名为 表名_*_*避免重复
老规矩截图数据listBuff:
下面假设在需要操作的脚本
----正文 假设这是另一个脚本 开始合并去重
function HellBuffInfoMessage()
--假设这是请求到的服务器信息
local buffId = nil
local serverBuffInfo =
{
{id=1001,mapId=1001,buffId={1888}},
{id=1002,mapId=1002,buffId={5888}}
}
for k,v in pairs(serverBuffInfo) do --默认 1002 项目中可以获取当前层
if v.mapId == 1002 then
buffId = v.buffId
end
end
---传入当前楼层id获取当前层的buff列表
local open = cfg_hellKing_GetLayersBuff(1002)
local cfg = {}
--遍历,取出buffid
for k,v in pairs(open) do
table.insert(cfg,v)
end
--在本地buff中插入服务器随机buff
table.insert(cfg,buffId)
local table2={}
for key,val in pairs(cfg) do--键的唯一性
table2[val]=true
end
--保存最终结果
local table3={}
for key,val in pairs(table2) do
table.insert(table3,key)--将key插入到新的table,构成最终的结果
end
end
上方 table3则是最终去重结果
背景故事:因为写在消息回调中,每次请求都会重复赋值插入,当然有很多办法可以避免,不过现在是举例去重,噢耶.
这里主要是用了键的唯一性,刚开始可以不理解,不过一定要会带入,以备不时只需,避免加班熬夜.
如果后面再需要什么服务器的随机buff排前面或者本地常驻buff排前面就需要用到table库函数的 table.sort 排序了.下方直达车 table库函数
有问题可以留言或者评论,哪方面不对敬请指教,自当勉励.
lua不追求高大上的写法,简单方便即为真理
愿各位同道能不加班不熬夜。不掉发