unity3D技术分享

Lua学习笔记

2019-01-17  本文已影响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放后面

上一篇下一篇

猜你喜欢

热点阅读