Lua学习笔记

作者: 合肥黑 | 来源:发表于2019-01-17 10:08 被阅读11次

    参考
    Lua 5.3 参考手册
    Lua 5.1 参考手册
    云风的blog
    Lua开发者论坛
    Pogramming in Lua
    runoob Lua教程
    a

    排序:
    参考Lua多重排序
    1.Lua排序的原理是冒泡排序,即从前往后比较,满足一定条件A则交换,否则不交换。
    2.Lua排序函数table.sort(tbl, sortFunc), sortFunc中会比较前后表中前后两个值,sortFunc函数返回true则不交换,返回false则交换。
    例子:

    table_demo = {
        [1] = {
            creat_time = 11,
            quality = 1,
            sum = 4,
        },
        [2] = {
            creat_time = 12,
            quality = 1,
            sum = 2,
        },
        [3] = {
            creat_time = 13,
            quality = 1,
            sum = 1,
        },
        [4] = {
            creat_time = 14,
            quality = 1,
            sum = 5,
        },
        [5] = {
            creat_time = 15,
            quality = 1,
            sum = 7,
        },
    }
    

    目标:将table_demo 按照sum从小到大排序, 若sum大小相等则按照quality从小到大排序, 如果quality一样大,则按create_time从小到大排序(ps: create_time大小设置是都不同的)。

    代码如下:

    function  sortFunc(a, b)
        if a.sum == b.sum then
            if a.quality == b.quality then
                return a.creat_time < b.creat_time
            else
                return a.quality < b.quality
            end
        else
            return a.sum < b.sum
        end
    end
    
    
    table.sort(table_demo, sortFunc)
    
    
    for k=1, 5 do
        print("-----", k, table_demo[k].creat_time, table_demo[k].quality, table_demo[k].sum)
    end
    

    结果:
    —– 1 13 1 1
    —– 2 12 1 2
    —– 3 11 1 4
    —– 4 14 1 5
    —– 5 15 1 7

    下面是actionscript:

    var a:Object={price:20,number:3};
    var b:Object={price:10,number:7};
    var c:Object={price:50,number:1};
    var amountAry:Array=[a,b,c];
    function compare(paraA:Object,paraB:Object):int
    {
       var resultA:Number=paraA.price*paraA.number;
       var resultB:Number=paraB.price*paraB.number;
       if(resultA>resultB) return 1;//A放B后面,从小到大排列
       if(resultA<resultB) return -1;
       return 0;
    }
    amountAry.sort(compare);
    trace(amountAry[0].price);//50
    trace(amountAry[1].price);//20
    trace(amountAry[2].price);//10
    

    两者完全相反:
    lua:传入a,b 如果返回true则a放前面
    as:传入a,b 如果返回1则a放后面

    相关文章

      网友评论

        本文标题:Lua学习笔记

        本文链接:https://www.haomeiwen.com/subject/ifuwpttx.html