码迷,mamicode.com
首页 > 其他好文 > 详细

多因子排序的一种实现方式

时间:2014-05-13 19:17:24      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

给列表排序的时候偶尔会需要实现多因子排序。例如,有个UI将会显示物品,而这些物品需要按照一定规律排序,规则由以下几个因子决定,因子的重要性由低到高分别是:物品的价格,等级高低,可穿戴等级高低。

这意味着,排序的时候如果两个物品价格相同,则需要考虑等级,而如果等级也相同,则需要考虑穿戴等级。

新手会写使用一堆if来实现,而本席年轻的时候想到了一种更好的实现方式,如下:

 

w0,w1为两个排序物品的权重,将多个因子归纳成两个权重比较,类似于位图,一个因子占一个bit,越重要的因子越靠高位,一个bit就足以推翻结果。

bubuko.com,布布扣
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 )
bubuko.com,布布扣

 

多因子排序的一种实现方式,布布扣,bubuko.com

多因子排序的一种实现方式

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/mrstrong/p/3724372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!