zoukankan      html  css  js  c++  java
  • lua table 排序--满足多条件排序

    前提

    假设 一个小怪 有三种属性,等级(level)、品质(quality)、id(pid)

    我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序。

    根据等级排序

        local function testSort(a,b)
            return tonumber(a.level)> tonumber(b.level)
        end
        table.sort(tableName,testSort)

    属性优先级排序

    需求如下:

        --排列顺序优先级从高到低依次为:
        --第一:等级由高到低;
        --第二:稀有度由高到低;
        --第三:伙伴ID从高到低。

    对于lua table的排序,sort函数的使用。比如先按照等级排序,然后按照品质,再按照ID排序。实现方法如下:

        --排列顺序优先级从高到低依次为:
        --第一:等级由高到低;
        --第二:稀有度由高到低;
        --第三:伙伴ID从高到低。
        local function sort_(a, b)
            local r
            local al = tonumber(a.level)
            local bl = tonumber(b.level)
            local aq = tonumber(a.data.quality)
            local bq = tonumber(b.data.quality)
            local aid = tonumber(a.pid)
            local bid = tonumber(b.pid)
            if  al == bl then
                if aq == bq then
                    r = aid > bid
                else
                    r = aq > bq
                end 
            else
                r = al > bl
            end
            return r
        end
    table.sort(tableName,sort_)
     

    错误的方法

    可以参考sort函数实现的原理理解上面的代码。 

    如果使用 return al >= bl 这种返回值的话,是错误的:如下

        local function testSort(a,b)
            return tonumber(a.level)>= tonumber(b.level)
        end
  • 相关阅读:
    Bundles
    使用二进制协议 (附源码)
    河内之塔 算法
    什么是DCI
    C#利用ODP.NET往oracle中高效插入百万数据
    分析Sizzle引擎
    data格式加载图片
    jQuery获取checkbox选中项等操作及注意事项
    日期类型函数转换的特殊性
    QT中代码中与设计器中控件信号与SLOT连接(原来还可以这样连接)
  • 原文地址:https://www.cnblogs.com/zhangfeitao/p/4635989.html
Copyright © 2011-2022 走看看