table.sort (table [, comp])
說明:將表中的值按comp提供的函數進行排序,預設comp為Lua控制字元,comp
為lua函數,當參數1小於參數2時回傳true,否則回傳false。
範例:
> tbl = {"alpha", "beta", "gamma", "delta"}
> table.sort(tbl)
> print(table.concat(tbl, ", "))
alpha, beta, delta, gamma
comp是一個可選的參數,此參數是一個外部函數,可以用來自定義sort函數的排
序標準。
此函數應滿足以下條件:接受兩個參數(依次為a, b),並返回一個布爾型的值,
當a應該排在b前面時,返回true,反之返回false。
例如,當我們需要降序排序時,可以這樣寫:
> sortFunc = function(a, b) return b < a end
> table.sort(tbl, sortFunc)
> print(table.concat(tbl, ", "))
gamma, delta, beta, alpha
用類似的原理還可以寫出更加複雜的排序函數。例如,
有一個table存有工會三名成員的姓名及等級信息:
guild = {}
table.insert(guild, {
name = "Cladhaire",
class = "Rogue",
level = 70,
})
table.insert(guild, {
name = "Sagart",
class = "Priest",
level = 70,
})
name = "Mallaithe",
class = "Warlock",
level = 40,
})
對這個table進行排序時,應用以下的規則:按等級升序排序,在等級相同時,
按姓名升序排序:
可以寫出這樣的排序函數:
function sortLevelNameAsc(a, b)
if a.level == b.level then
return a.name < b.name
else
return a.level < b.level
end
end
測試功能如下:
> table.sort(guild, sortLevelNameAsc)
> for idx, value in ipairs(guild) do print(idx, value.name) end
1, Mallaithe
2, Cladhaire
3, Sagart