游戏中有这么个需求,在等级奖励界面,已经领取的奖励往后排,可以领取的奖励往前排。
这个用 Lua Table 的 Sort 函数 多字段排序 可以实现
如下测试代码
--按照规定顺序排序:可以领取、不能领取、已经领取 --status=0 可以领取 1不能领取 2已经领取 local fundRewardTable = {} table.insert(fundRewardTable,{index=0,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=2}) table.insert(fundRewardTable,{index=1,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=2}) table.insert(fundRewardTable,{index=2,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=0}) table.insert(fundRewardTable,{index=3,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=2}) table.insert(fundRewardTable,{index=4,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=0}) table.insert(fundRewardTable,{index=5,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=2}) table.insert(fundRewardTable,{index=6,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=1}) table.insert(fundRewardTable,{index=7,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=1}) table.insert(fundRewardTable,{index=8,itemReward="3001_2|3002_1",propReward="9_10000|12_50",status=1}) for i,v in ipairs(fundRewardTable) do print(v.index,v.status) end print("-------------------") --排序 table.sort( fundRewardTable,function ( a,b ) -- body if a.status==b.status then return a.index<b.index end return a.status < b.status end ) for i,v in ipairs(fundRewardTable) do print(v.index,v.status) end
代码运行结果
0 2 1 2 2 0 3 2 4 0 5 2 6 1 7 1 8 1 ------------------- 2 0 4 0 6 1 7 1 8 1 0 2 1 2 3 2 5 2 [Finished in 0.0s]