标签:style blog class code java c
给列表排序的时候偶尔会需要实现多因子排序。例如,有个UI将会显示物品,而这些物品需要按照一定规律排序,规则由以下几个因子决定,因子的重要性由低到高分别是:物品的价格,等级高低,可穿戴等级高低。
这意味着,排序的时候如果两个物品价格相同,则需要考虑等级,而如果等级也相同,则需要考虑穿戴等级。
新手会写使用一堆if来实现,而本席年轻的时候想到了一种更好的实现方式,如下:
w0,w1为两个排序物品的权重,将多个因子归纳成两个权重比较,类似于位图,一个因子占一个bit,越重要的因子越靠高位,一个bit就足以推翻结果。
function cmp(itemA, itemB) local w0 = 0 local w1 = 0 --价格 if itemA.price < itemB.price then w0 = w0 + 1 elseif itemA.price > itemB.price then w1 = w1 + 1 end --物品的等级 if itemA.level < itemB.level then w0 = w0 + 2 elseif itemA.level > itemB.level then w1 = w1 + 2 end --可穿戴等级 if itemA.equipmentLevel < itemB.equipmentLevel then w0 = w0 + 4 elseif itemA.equipmentLevel > itemB.equipmentLevel then w1 = w1 + 4 end return w0 > w1 end table.sort( items, cmp )
标签:style blog class code java c
原文地址:http://www.cnblogs.com/mrstrong/p/3724372.html