参考
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放后面