LUA表排序

表排序:table.sort (list [,comp])

参数list:指定表,可选参数comp:排序函数,无参数时通常按升序排序。

排序函数针对表中连续的序列,其间不可以存在空洞或nil,排序函数需要两个形参(对应表中每次参加比较的两个数据),需要一个比较两个形参表达式的返回值,不能含有等于关系,例如>=,<=,==。

do
    s = {{name="山海", lv=60},{name="山海", lv=55},{name="天空", lv=20},{name="大地", lv=24},{name="蓝天", lv=80},{name="白云", lv=34},{name="山海", lv=68}}
function st (s1, s2)-- 排序函数 if s1.name == s2.name then -- 如果他们的名字相同,就返回按等级升序排序 return s1.lv < s2.lv else return s1.name < s2.name -- 否则按名字升序排序 end -- return s1.name < s2.name or s1.name == s2.name and s1.lv < s2.lv -- 与上面等价 end table.sort (s, st) for k, v in ipairs(s) do print (k, v.name, v.lv) end end

--[[

1  大地  24
2  天空  20
3  山海  55
4  山海  60
5  山海  68
6  白云  34
7  蓝天  80

--]]

 

上一篇:使用 Code::Blocks 搭建 LVGL 模拟器仿真环境


下一篇:17-在Linux中通过LVM管理 扩容和缩小磁盘空间