Lua Table 多字段排序

游戏中有这么个需求,在等级奖励界面,已经领取的奖励往后排,可以领取的奖励往前排。

这个用 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]


你可能感兴趣的:(排序,table,lua)