• 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
  • 相关阅读:
    js判断CheckBox是否选中
    C# 判断一个请求是异步请求
    正判断文件类型
    mysql启动命令窗口闪退问题
    db2手动恢复备份数据库
    redis使用
    分析Redis架构设计
    DB2数据库的在线备份步骤
    MySql主从复制
    SpringMVC工作原理
  • 原文地址:https://www.cnblogs.com/zhangfeitao/p/4635989.html
Copyright © 2020-2023  润新知