表排序: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
--]]